最近用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);
mysql_query("SET NAMES 'utf8'");
实在找不到原因,到网上搜了一下。原来PDO在PHP 5.3.6之后的版本,如上面设置的是有效的。低于5.3.6版本的,需要用下面的方法设置:
$dbh = new PDO($dns, $user, $password); $dbh->exec("set names utf8");