根据 php.net、Stack Overflow 和其他信任来源,我可以找到 4 种在 PDO 连接上设置 UTF-8 的不同方法,但找不到更好的选择:
$pdo_db = 'mysql:host=localhost;dbname=local_db;charset=utf8'; // METHOD #1
$pdo_login = 'root';
$pdo_pass = 'localpass';
$db = new PDO($pdo_db, $pdo_login, $pdo_pass, array(
PDO::ATTR_ERRMODE => $localhost ? PDO::ERRMODE_EXCEPTION : PDO::ERRMODE_SILENT,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', // METHOD #2
));
$db->exec('SET NAMES utf8'); // METHOD #3
$db->exec('SET CHARACTER SET utf8'); // METHOD #4
所以,我的理解是,方法 1 仅适用于 PHP 5.3+(但似乎有点错误),方法 2 仅适用于 MySQL。方法 3 和 4 之间的区别是MySQL 的东西,但我仍然不知道哪个更好。有没有办法在 PDO 属性中调用 SET NAMES,但不是只用于 MySQL?