Encoding UTF8编码问题?

Encoding UTF8编码问题?,encoding,utf-8,pdo,Encoding,Utf 8,Pdo,我对字符á,Á,ó,Ó,ú,Ú,í,Í,É作为奇怪的字符存储在mysql数据库中有一个问题。我们正在使用PDO插入数据库 奇怪的是,我有一个本地副本的网站在我的电脑上的WAMP的所有工作良好,没有编码问题。如果可能的话,这个实时站点位于Linux服务器上 本地数据库是live DB的副本,因此所有表中的所有编码都是相同的 我已尝试设置PDO编码: $pdo=new pdo('mysql:host='。设置::DBHostName()。;charset=utf8;dbname='。设置::dbna

我对字符á,Á,ó,Ó,ú,Ú,í,Í,É作为奇怪的字符存储在mysql数据库中有一个问题。我们正在使用PDO插入数据库

奇怪的是,我有一个本地副本的网站在我的电脑上的WAMP的所有工作良好,没有编码问题。如果可能的话,这个实时站点位于Linux服务器上

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

我已尝试设置PDO编码:

$pdo=new pdo('mysql:host='。设置::DBHostName()。;charset=utf8;dbname='。设置::dbname(),设置::DBUsername(),设置::DBPassword(),数组( PDO::ATTR_ERRMODE=>PDO::ERRMODE_异常 ));


还有其他建议吗?我不明白为什么它可以在本地工作而不能在我们的实时站点上工作?

对于5.3.6以后的PHP版本,您应该在DSN中设置编码。

对于所有其他人来说,发出常规的集合名称查询是唯一的选择。

PDO构造函数调用的最后一个参数是特定于驱动程序的选项,以键=>值对的数组形式给出。MySQL驱动程序有一个PDO::MySQL_ATTR_INIT_命令选项,您可以在其中指定每次连接到数据库时执行的命令。您可以使用MySQL特定的查询集名称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');

PDO::MYSQL_ATTR_INIT_COMMAND=>“SET NAMES utf8”似乎可以解决这个问题。您需要
utf8mb4
,更不用说,
SET NAMES utf8mb4