根据php.net,StackOverflow和其他信任来源,我可以找到4种不同的方法在PDO连接上设置UTF-8,但找不到哪一种更好的选择.
PDO连接代码(以及一些内容):
$localhost = $_SERVER['SERVER_NAME'] == 'localhost';
error_reporting(-1); ini_set('display_errors', $localhost); // Old : error_reporting($localhost ? -1 : 0); see answer above
date_default_timezone_set('Europe/Paris');
$pdo_db = 'mysql:host=localhost;dbname=local_db;charset=utf8'; // METHOD #1
$pdo_login = 'root';
$pdo_pass = 'localpass';
try {
$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
$db -> exec('SET time_zone = \''.date_default_timezone_get().'\'');
} catch (PDOException $error) {
die($error -> getMessage());
}
因此,我所理解的是,方法1仅适用于PHP 5.3(但似乎它有点错误),而方法2仅适用于MySQL.
方法3和4之间的差异是MySQL thing,但我仍然不知道哪个更好.有没有办法在PDO属性中调用SET NAMES,但不能仅用于MySQL?
谢谢!