侃侃尔雅
为了完整起见,实际上三从PDO连接到MySQL时设置编码的方法以及可用的编码方式取决于PHP版本。优先次序是:charset参数在DSN字符串中。跑SET NAMES utf8带着PDO::MYSQL_ATTR_INIT_COMMAND连接选项跑SET NAMES utf8手动此示例代码实现了这三种方法:<?php
define('DB_HOST', 'localhost');define('DB_SCHEMA', 'test');define('DB_USER', 'test');define('DB_PASSWORD', 'test');define('DB_ENCODING', 'utf8');$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA;$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,);if( version_compare(PHP_VERSION, '5.3.6', '
if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING;
}}else{
$dsn .= ';charset=' . DB_ENCODING;}$conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options);if( version_compare(PHP_VERSION, '5.3.6', '
$sql = 'SET NAMES ' . DB_ENCODING;
$conn->exec($sql);}做这三件事可能是过分的(除非您正在编写您计划分发或重用的类)。