非法混合的归类(utf8mb4_unicode_ci,IMPLICIT)和(utf8mb4_general_ci,IMPLICIT)用于操作' ='

时间:2017-05-17 14:40:27

标签: mysql collation

我收到了这个错误;

  

非法混合排序(utf8mb4_unicode_ci,IMPLICIT)和(utf8mb4_general_ci,IMPLICIT)进行操作' ='

我改变了#Col;" to" utf8mb4_unicode_ci"。然后表被截断,我再次重新导入行。但仍然得到相同的错误

6 个答案:

答案 0 :(得分:7)

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

所以你需要设置整理。 例如:

WHERE tableA.field COLLATE utf8mb4_general_ci = tableB.field

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

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

答案 1 :(得分:3)

对于Join Query我使用这条查询来解决这样的错误:

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 '='

我对排序规则知之甚少,但似乎两个表都遵循不同的字符集规则。因此,等于运营商无法执行。因此,在第一个查询中,我指定了一个收集和组合的排序规则集。

答案 2 :(得分: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

答案 3 :(得分:2)

检查与charset=utf8mb4的连接

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

答案 4 :(得分:1)

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

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

See example here

答案 5 :(得分:0)

--这对我有用

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;