【问题标题】:Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='非法混合排序规则 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT) 用于操作 '='
【发布时间】:2017-10-17 02:25:42
【问题描述】:

我收到了这个错误;

用于操作“=”的排序规则 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT) 的非法混合

我将“排序规则”更改为“utf8mb4_unicode_ci”。然后表被截断,我再次重新导入行。但仍然遇到同样的错误

【问题讨论】:

  • 您是否尝试过更改导入文件的排序规则?
  • 更改 .csv 文件的排序规则? @FMashiro
  • 答案在SHOW VARIABLES LIKE 'char%';SHOW CREATE TABLE 中的某处。让我们看看这两个。 (不要打扰截断或重新导入或重新创建表。)
  • 你得到答案了吗?如果是这样,如果您接受答案会很好。

标签: mysql collation


【解决方案1】:

我猜你在加入的表上有不同的排序规则。它说您在操作= 中使用了非法的排序规则组合。

所以你需要设置排序规则。 例如:

WHERE tableA.field COLLATE utf8mb4_general_ci = tableB.field

那么您在= 操作上设置了相同的排序规则。

由于您没有提供有关表格的更多信息,这是我能提供的最好的伪代码。

【讨论】:

  • 谢谢。我更改了表格排序规则,但没有帮助。最后一件事,我重新创建了那个表:(
  • 谢谢。它对我有用。你拯救了我的一天。
【解决方案2】:

对于加入查询,我使用这条查询来解决此类错误:

select * from contacts.employees INNER JOIN contacts.sme_info  
ON employees.login COLLATE utf8mb4_unicode_ci = sme_info.login

之前使用以下查询,我得到了同样的错误:

select * from contacts.employees LEFT OUTER JOIN contacts.sme_info  
ON employees.login = sme_info.login

Error: Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

我不太了解排序规则,但似乎两个表都遵循不同的字符集规则。因此,等于运算符无法执行。所以在第一个查询中,我指定了一个排序规则集来收集和组合。

【讨论】:

    【解决方案3】:

    经过几个小时后,我终于找到了适合我的解决方案(使用 phpMyAdmin)。

    记得在执行这些操作之前先备份你的数据库。

    1. 登录 phpMyAdmin。
    2. 从左侧列表中选择您的数据库。
    3. 点击顶部选项卡中的“操作”。
    4. 在排序规则框中(靠近页面底部),从下拉菜单中选择新排序规则。

    我也查了
    *更改所有表格排序规则
    *更改所有表格 列排序规则

    我认为这不是 100% 必要的,但重新启动 mySQL/MariaDb 服务 + 断开连接并重新连接到数据库也是一个好主意。


    补充说明: 我不得不使用 utf8mb4_general_ci,因为在使用 utf8mb4_unicode_ci(我最初想使用)时问题仍然存在

    有关其他信息、命令行查询和插图示例,我推荐这篇文章:https://mediatemple.net/community/products/dv/204403914/default-mysql-character-set-and-collation

    【讨论】:

      【解决方案4】:

      检查与charset=utf8mb4的连接

      'dsn'       => 'mysql:dbname=DatabaseName;host=localhost;charset=utf8mb4';
      

      【讨论】:

      • 这个被忽略的答案应该得到更多的关注:)
      【解决方案5】:

      遇到了同样的问题并通过更新字段的排序规则来解决它。

      即使您更改了表格的排序规则,各个表格字段仍然具有旧的排序规则。尝试更改表并更新那些 varchar 字段

      See example here

      【讨论】:

        【解决方案6】:

        -- 这对我有用

        SET collation_connection = 'utf8mb4_general_ci';
        ALTER DATABASE your_bd CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
        ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
        

        【讨论】:

        • Stack Overflow 是一个英文网站。
        猜你喜欢
        • 2016-08-18
        • 1970-01-01
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        • 2010-11-03
        • 2012-07-30
        • 1970-01-01
        相关资源
        最近更新 更多