PHP不同版本PDO設置字符集

最近用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");

再運行插入,中文顯示正常了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章