在此处查看:http://www.php.net/manual/en/mysqlinfo.concepts.charset.php
我明白使用
SET NAMES utf8
不是一个好主意,但目前尚不清楚:
我担心的代码很危险:
$this->_conn = new PDO('mysql:host=host.name.blabla;dbname=my_database_name','username', 'password',array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
));
谢谢!
答案 0 :(得分:2)
你真的还在使用PHP> =版本3.6和< 5.3.6?
假设您有5.3.6或更高版本......
Character sets 和PDO_MYSQL DSN 说你应该用
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
并暗示(不够明确)utf8
如果适当,应由utf8mb4
替换。
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
不是很好,但在5.3.6之前是替代方案。
我觉得“危险”太强了,甚至在5.3.6之前。
相关技巧:在init_command = SET NAMES ...
中使用my.cnf
是错误的,因为在init_command
连接时未执行root
。
utf8mb4
是UTF-8的首选CHARACTER SET
,因为它包含表情符号以及utf8
中缺少的一些中文字符。从MySQL 5.5.3开始提供该charset。