最近做一小项目,PDO连接数据库,在开发环境上一切正常,上线部署时,一进入生产环境,就发现从数据库中查看数据,为UTF-8编码。从phpMyAdmin中查看也可正常显示汉字。可一从项目页面中查看汉字数据,就变为问号,有多少个汉字,就出现多少个问号。

网上查了一大天,也试了许多种方法,都无法解决这个问题。

直到突然灵机一现,会不会是PDO建立请求时发送的字符编码没有生效。

PDO连接数据库的DSN串如下:

mysql:host=127.0.0.1;port=3306;dbname=weixin_vote;charset=utf8

测试环境PHP版本为5.4.4,生产环境PHP版本为5.3.3(由5.2.17升级,由于旧系统包袱,未跨大版本升级)。

在5.3.3版本的PDO中,DSN串中的charset部分是不生效的。而在5.4.4中,则一切正常。

发现问题就好办了,在代码中增加兼容部分:

$db->query('set names utf8');

OK,问题搞定~!