我收到了这个错误;
非法混合排序(utf8mb4_unicode_ci,IMPLICIT)和(utf8mb4_general_ci,IMPLICIT)进行操作' ='
我改变了#Col;" to" utf8mb4_unicode_ci"。然后表被截断,我再次重新导入行。但仍然得到相同的错误
答案 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)。
在执行这些操作之前,请记住首先备份数据库。
我也检查了
*更改所有表格的排序规则
*更改所有表格 列排序规则
我认为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)
答案 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;