2

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

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

有没有内置的方法来处理这个?如果没有,你会建议我如何处理这个问题?


编辑:使用 PHPMyAdmin 浏览所有数据时的数据示例:

handelë(应该是handelë

√skal(应该是√skal

另外,数据在HTML文档中是正确输出的,只要我使用输出编码UTF-8,但保持mysqli连接字符集为latin1。这一切都相当混乱,。

非常感谢您的帮助!

4

1 回答 1

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提供。

感谢您花时间研究我的问题,伙计们!:)

于 2013-08-04T13:22:34.963 回答