【问题标题】:MySQL convert charset issueMySQL转换字符集问题
【发布时间】:2013-08-04 11:46:06
【问题描述】:

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

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

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


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

handelë(应该是handelë

√skal(应该是√skal

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

非常感谢您的帮助!

【问题讨论】:

  • 试试utf8_general_ci
  • 如何在不破坏所有内容的情况下转换数据?
  • 如果它确实损坏了一切,你可以在桌子上做一个REPAIR。 (我对字符集的工作不多,但我只给了我 2 美分)
  • 在此之前和之后创建 I 备份(出于安全考虑):ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 对表格也这样做:ALTER TABLE db_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

标签: php mysql character-encoding utf8-decode


【解决方案1】:

好吧!所以这就是一定发生的事情:

用户界面(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

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

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多