您的 MySQL 连接本身可能未使用 utf8。来自 MySQL 手册:
SET NAMES indicates what character set the client will use to send SQL statements
to the server. Thus, SET NAMES 'cp1251' tells the server, “future incoming
messages from this client are in character set cp1251.” It also specifies the
character set that the server should use for sending results back to the client.
(For example, it indicates what character set to use for column values if you use
a SELECT statement.)
根据您连接到数据库的方式(mysql_connect/mysqli_connect 或 PDO),步骤会有所不同。如果使用mysql_connect();
ormysqli_connect;
那么您将需要运行mysql_query("SET NAMES utf8");
. 理论上,如果使用 PHP PDO,您可以使用相同的步骤,但您也可以在 PDO 对象构造期间设置 init 命令。这是我的一个数据库交互类的示例。
$dsn = 'mysql:host='.$database_detail['dbhost'].';dbname='.$database_detail['dbname'];
$this->dbh = new PDO($dsn, $database_detail['dbuser'],
$database_detail['dbpass'], array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => FALSE,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
));