【问题标题】:MySQL collation and PHP charset conflictMySQL排序规则和PHP字符集冲突
【发布时间】:2011-08-21 13:31:45
【问题描述】:
我有一堆从 latin-1 MySQL 数据库中提取的丹麦文本,在 PHP 中回显时可以正确显示。当我需要回显其他一些不是从数据库中获取的丹麦语字符时,问题就开始了。
我所做的实际上是输出标题
Content-Type: text/html; charset=iso-8859-1
也让未查询的字符也能正确显示。
问题是,当我这样做时,查询的字符显示不正确。
【问题讨论】:
标签:
php
mysql
character-encoding
collation
【解决方案1】:
仅仅因为数据存储在 latin-1 整理表中并不意味着它是 latin-1 编码的。这是由于连接SET NAMES设置与排序规则相同时MySQL没有进行任何字符转换。
我怀疑您在 latin1 数据库中存储了一些 UTF8 字符,这使问题变得混乱。
如需更多帮助,请添加以下详细信息:
- 您设置的 MySQL 连接编码
- “未查询”字符来自何处的详细信息
【解决方案2】:
使用 unicode。 UTF-8 => 正确的方式。
所以,在数据库中设置 utf8_unicode_ci,UTF-8 作为页面字符集,在查询之前设置 mysql_query("SET NAMES UTF8");