【问题标题】:Find *actual* character encoding of data in MySQL DB: UTF8 Latin1 illegal collation在 MySQL DB 中查找数据的 *actual* 字符编码:UTF8 Latin1 非法排序规则
【发布时间】:2010-08-25 15:34:39
【问题描述】:

现在花费了几个小时,可以使用一些帮助!我们的网站查询我们的 db - 表列设置为 Latin1 排序规则,网站已将名称设置为 UTF8 进行查询。

数据是法语,当我们搜索包含重音字符的字符串时,我们会得到“排序规则的非法混合 (latin1_swedish_ci,IMPLICIT) 和 (utf8_general_ci,COERCIBLE) 用于操作 'like' " 错误。

如果您导航到完全加载数据的页面,它会显示重音字符没有问题,只是在使用搜索功能时它会中断。

我们尝试了很多方法,包括ALTER TABLE t1 CHANGE c1 c1 BLOB; ALTER TABLE t1 更改 c1 c1 文本字符集 utf8;

但这会损坏数据:每个字段中第一个重音字符之前的文本很好,但是字段中的其余文本被完全删除:“Métal”变为“M”。我正在使用 phpMyAdmin 来尝试修复这个 BTW。不确定这是否有问题。

那么数据是 UTF8 编码的吗?如果是这样,为什么 ALTER TABLE 不起作用,我已经看到它被提及为在这么多网页上解决此问题的方法!如果它不起作用的事实意味着数据不是 UTF8 编码的,我该如何找出它是什么?

【问题讨论】:

    标签: php mysql character-encoding


    【解决方案1】:

    在您的网站和数据库之间使用不同的编码并不是一个好主意......为了避免这个问题,最好将所有内容都保存在 utf8 中。不过,应该可以使用排序规则转换表格的编码。

    【讨论】:

    • 我相信最初它们是 UTF8,但是将此 UTF8 数据的数据库还原到默认设置为 latin1 的系统上是我们现在遇到此问题的原因(在我之前,所以我不知道确切细节)。尽管尝试了数小时,但仍无法成功转换...
    • 最后我们不得不做一个 mysqldump 并重建每个表(制作每个表的副本并在它们上试一试,以防它不适合你) mysqldump –u root –p通过 --default-character-set=latin1 db_name tablename1 > tablename1.sql 然后我们把转储文件的 CREATE TABLE 代码最后改成 DEFAULT CHARSET utf-8,用 UTF-8 编码重建表。
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2015-07-13
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多