在使用MySQL数据库时,开发者可能会遇到类似 java.sql.SQLException: Illegal mix of collations 的错误。这种错误通常由不同字符集排序规则(Collation)的字段或值在查询中被混合使用引起。本文将通过一个实际案例,解析错误原因并提供解决方案。
遇到的问题:
java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '='
错误信息提到在操作符'='时,utf8mb4_general_ci和utf8mb4_0900_ai_ci这两种collation不兼容。
Collation(排序规则) 是MySQL中用于定义字符串比较、排序和搜索行为的规则。它决定了字符的权重和等价性。例如:
utf8mb4_general_ci:较旧的排序规则,不区分大小写(ci表示Case Insensitive)。
utf8mb4_0900_ai_ci:MySQL 8.0引入的新规则,支持Unicode 9.0标准,区分重音和某些特殊字符(ai表示Accent Insensitive)。
当两个不同Collation的字段被比较时,MySQL无法确定使用哪种规则,从而抛出异常
原因分析:
解决方法:
原本排序规则是这个utf8mb4_0900_ai_ci,跟别的表 不符合,我就改成了统一了utf8mb4_general_ci
wk_crm_make这个是我的表名根据需要改成自己的就可以了;
分别执行这两SQL语句就可以了,
SHOW CREATE TABLE wk_crm_make ;
ALTER TABLE wk_crm_make CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;