我遇到的问题是人物á,Á,ó,ú,ú,Ú,í,Í,é,É作为奇怪的字符存储在我们的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 ));
还有其他建议吗?我不明白为什么它会在本地工作而不是在我们的现场工作?
答案 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');