最近用PDO操作MySQL,自己在Mac上測試的好好的。SQL文件、代碼一起上到服務器上,寫入數據到MySQL中,中文全部亂碼。
首先,查看了MySQL服務端的編碼,全部是UTF-8,在看數據庫、表、相關字段,全都是utf8_general_ci。
然後,看代碼,也設置了字符集:
$dns = 'mysql:dbname=sausagedb;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = '111111';
$dbh = new PDO($dns, $user, $password);
可是,插入的數據的中文部分,仍然亂碼。之後,用PHP直接連接MySQL,加了一句:
mysql_query("SET NAMES 'utf8'");
插入的數據中文部分,已經顯示正常了。說明服務端沒有問題,有問題的還是代碼。
實在找不到原因,到網上搜了一下。原來PDO在PHP 5.3.6之後的版本,如上面設置的是有效的。低於5.3.6版本的,需要用下面的方法設置:
$dbh = new PDO($dns, $user, $password);
$dbh->exec("set names utf8");
再運行插入,中文顯示正常了!