0

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

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

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

我尝试设置 PDO 编码:

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

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

4

2 回答 2

1

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

于 2013-03-14T11:28:12.747 回答
0

PDO 构造函数调用的最后一个参数是特定于驱动程序的选项,以带有键 => 值对的数组的形式给出。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');
于 2017-07-31T13:04:09.150 回答