数据库中的所有表都有utf8_unicode_ci排序规则
这是我的连接代码:
<?PHP
$MysqL_username = "root";
$MysqL_password = "";
$MysqL_host = "localhost";
$MysqL_database = "cms";
try
{
//connect
global $db;
$db = new PDO('MysqL:dbname=' . $MysqL_database . ';host=' . $MysqL_host . ';charset=utf8;', $MysqL_username, $MysqL_password);
$db->setAttribute(PDO::MysqL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex)
{
die("Unable Connect To DataBase");
}
?>
在localhost我没有编码的问题,但当我上传源到主机我看到??????而不是字符?
解决方法:
这个:
$db->setAttribute(PDO::MysqL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
完全没有意义.请参见http://php.net/manual/en/ref.pdo-mysql.php. MysqL_ATTR_INIT_COMMAND在建立连接后立即执行.如果你在一个已经完全创建的PDO对象上设置它,那就太晚了,它永远不会执行.您需要将它传递给构造函数:
new PDO(..., ..., ..., array(PDO::MysqL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))