操作'='的排序规则(utf8mb4_unicode_ci,IMPLICIT)和(utf8mb4_general_ci,IMPLICIT)的非法混合

Mic*_*l42 14 mysql collation

我收到了这个错误;

操作'='的排序规则(utf8mb4_unicode_ci,IMPLICIT)和(utf8mb4_general_ci,IMPLICIT)的非法混合

我将“整理”更改为“ utf8mb4_unicode_ci”。然后表被截断,我再次重新导入行。但仍然出现相同的错误

小智 13

-- 这对我有用

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;
Run Code Online (Sandbox Code Playgroud)


MrA*_*nea 12

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

因此,您需要设置排序规则。例如:

WHERE tableA.field COLLATE utf8mb4_general_ci = tableB.field

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

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


Rea*_*ode 10

经过几个小时后,我终于找到了一个适合我的解决方案(使用 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-collat​​ion


小智 9

检查连接charset=utf8mb4

'dsn'       => 'mysql:dbname=DatabaseName;host=localhost;charset=utf8mb4';
Run Code Online (Sandbox Code Playgroud)


Pra*_*nia 5

对于联接查询,我使用了以下查询来解决此类错误:

select * from contacts.employees INNER JOIN contacts.sme_info  
ON employees.login COLLATE utf8mb4_unicode_ci = sme_info.login
Run Code Online (Sandbox Code Playgroud)

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

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 '='
Run Code Online (Sandbox Code Playgroud)

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