0

Lubuntu 12.04、Apache、PHP 5.5.3-1ubuntu2、pdo_mysql 5.5.32、および MySQL 5.5.32-0ubuntu7-log で次のコードを試しています。

$dbh = new \PDO("mysql:host=$hostname;dbname=test_db;charset=utf-8", $username, $password);

$dbh->exec('SET NAMES utf8');

$sql = "SELECT name FROM test_table";
foreach ($dbh->query($sql) as $row) {
    error_log(bin2hex($row['name']));
}

そして、私は得る44656d6f737472616369c3b36eSET NAMES utf8クエリにコメントすると、取得されます44656d6f737472616369f36e(違いはc3b3ではなくf3)。

MySQL クライアントから、発行するSELECT HEX(name) FROM test_table limit 1;44656D6F737472616369C3B36E.

したがって、追加のクエリが必要なようですが、これによるとそうすべきではありません。

私は何か間違ったことをしていますか?

編集

charset=utf-8との両方を試しましcharset=utf8たが、同じ結果が得られました。

の出力SHOW CREATE TABLE test_table:

CREATE TABLE `test_table` (
    `name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

の関連出力SHOW FULL COLUMNS FROM test_table:

+-------+--------------+-----------------+
| Field | Type         | Collation       |
+-------+--------------+-----------------+
| name  | varchar(255) | utf8_general_ci |
+-------+--------------+-----------------+
4

1 に答える 1