Mysql JSON不能正确显示某些UTF-8字符

Mysql JSON不能正确显示某些UTF-8字符,mysql,json,symfony,encoding,utf-8,Mysql,Json,Symfony,Encoding,Utf 8,我有一个mysql数据库中的表。我无法控制表格内容。我正在检索的列被编码为UTF-8_danish_ci。数据由具有挪威字符的字符串组成:åøæ。通过mysql CLI访问时,数据看起来是正确的。在symfony2项目中,当我使用ORM检索数据并尝试json_编码时,我得到一个错误,即我发送给编码的数组的某些部分不是UTF-8 我甚至做了一个助手方法来确保所有结果在发送到编码之前都转换成UTF-8。在本例中,json起作用,但显示了什么?取而代之的是åèèèèchars 提前感谢。听起来像是驱动

我有一个mysql数据库中的表。我无法控制表格内容。我正在检索的列被编码为UTF-8_danish_ci。数据由具有挪威字符的字符串组成:åøæ。通过mysql CLI访问时,数据看起来是正确的。在symfony2项目中,当我使用ORM检索数据并尝试json_编码时,我得到一个错误,即我发送给编码的数组的某些部分不是UTF-8

我甚至做了一个助手方法来确保所有结果在发送到编码之前都转换成UTF-8。在本例中,json起作用,但显示了什么?取而代之的是åèèèèchars


提前感谢。

听起来像是驱动程序从MySQL检索数据的问题。确保字符集是连接定义的一部分:

原则: dbal: 默认连接:默认 连接: 违约: 数据库名称:数据库 驱动程序:%1数据库\u驱动程序% 主机:%database\u主机% 端口:%database\u端口% 用户:%database\u用户% 密码:%1数据库\u密码% 字符集:utf8

这将导致Doctrine通过mysql连接:host=$host;dbname=$db;charset=utf8,显式请求utf8。顺便说一句,检查你的PDO版本。。由于某种原因,5.3.6之前的PDO不支持charset=;条令使用在每次查询之前执行的集合名称黑客来试图解决这个问题。如果您使用的是较旧版本的PDO,那么在Symfony的最新版本中可能会出现问题


如果不是数据库驱动程序,则可能有双重编码字符串和/或混合编码字符串。看看图书馆。

出于一些非常奇怪的原因。当显示JSON字符串时,它会显示那些转义字符。当我将json字符串加载到用于自动完成的jquery插件中时,它正确地解析了这些转义字符。我的yml配置文件中确实有字符集:utf8。真的说不出为什么原始json会转义字符,并在html页面上正确显示它们。

从mysql驱动程序检索到数据后,在编码为json之前,数据是否正常?不完全正确,相反,我得到了一些黑色菱形。很抱歉花了这么长时间才回来,我不得不跑出小镇。补充了一个答案。