Я пытаюсь использовать следующий код для 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']));
}
И я получаю 44656d6f737472616369c3b36e
. Если я прокомментирую запрос SET 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 |
+-------+--------------+-----------------+