MySQL转换charset问题

时间:2013-08-04 11:46:07

标签: php mysql character-encoding utf8-decode

我有一个运行在PHP 5上的应用程序,使用 mysqli 扩展访问和存储MySQL数据库。该数据库包含许多表格,其编码为 UTF-8 (排序 utf8_swedish_ci )。

不幸的是,似乎mysqli连接被配置为使用ISO-8859-1编码所有内容,这意味着我有 UTF-8 表包含 latin1 数据。我现在正试图通过将所有内容转移到UTF-8(应该是!)来修复它。

是否有内置的处理方式?如果没有,你会如何建议我解决这个问题?


编辑:使用PHPMyAdmin浏览数据时的数据样本:

handelë(应为handelë

√skal(应为√skal

此外,数据在HTML文档中正确输出,只要我使用输出编码UTF-8,但将mysqli连接字符集保持为latin1。这一切都相当令人困惑,。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:5)

好的,好的!所以这就是必然发生的事情:

用户界面(UTF-8)→控制器(UTF-8)→型号(ISO-8859-1)→数据库(UTF-8,但它接收ISO-8859-1)

因此,字段配置为使用UTF-8编码,但它们接收ISO-8859-1编码数据。我想将错误编码的数据转换为UTF-8。

由于数据实际上是ISO-8559-1编码,我解决了我的问题与以下小MySQL“hack”:

UPDATE `table` SET `column` = convert(cast(convert(`column` using  latin1) as binary) using utf8)

在StackOverflow上提供ABS

感谢您抽出时间调查我的问题,伙计们! :)