UTF8编码问题?

时间:2013-03-14 10:49:50

标签: encoding utf-8 pdo

我遇到的问题是人物á,Á,ó,ú,ú,Ú,í,Í,é,É作为奇怪的字符存储在我们的mysql数据库中。我们正在使用PDO插入数据库。

奇怪的是,我在WAMP上的计算机上有一个本地网站副本,一切正常,没有编码问题。实时站点位于Linux服务器上,如果这可能有所不同。

本地数据库是实时数据库的副本,因此所有表格中的所有编码都相同。

我尝试过设置PDO编码:

$ pdo = new PDO('mysql:host ='。Settings :: DBHostName()。'; charset = utf8; dbname ='。Settings :: DBName(),Settings :: DBUsername(),Settings :: DBPassword(),array(                         PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION                     ));

还有其他建议吗?我不明白为什么它会在本地工作而不是在我们的现场工作?

2 个答案:

答案 0 :(得分:1)

对于自5.3.6以来的PHP版本,您应该在DSN中设置编码 对于所有其他人来说,发布传统的SET NAMES查询是唯一的选择。

答案 1 :(得分:0)

PDO构造函数调用的最后一个参数是驱动程序特定选项,以key =>的数组形式给出价值对。 MySQL驱动程序有一个PDO :: MYSQL_ATTR_INIT_COMMAND选项,您可以在其中指定每次连接数据库时执行的命令。您可以使用MySQL特定查询SET NAMES utf8作为init命令的值,告诉MySQL使用UTF-8作为我们连接的字符集。

$pdo = new PDO('mysql:host=mysql.host.com;dbname=db;array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"', 
'database', 'password');