我正在 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
andcharset=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 |
+-------+--------------+-----------------+