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");

再运行插入,中文显示正常了!

你可能感兴趣的:(数据库,mysql,PHP,乱码,pdo)