在使用MySQL8.0比对数据时报错如下:
1267 - Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
原因分析:
一个字段使用的是 utf8mb4_0900_ai_ci,而另一个是 utf8mb4_general_ci,虽然它们都属于 utf8mb4 字符集,但排序规则不同,MySQL 无法自动决定如何比较,因此抛出错误。


说明:
utf8mb4_general_ci:较旧,不区分重音(如 é = e),性能略快但排序不准确。
utf8mb4_0900_ai_ci:MySQL 8.0+ 默认,基于 Unicode 9.0,更准确(ai = accent insensitive, case insensitive)。
临时解决方案:在子查询中显式统一 collation(快速修复,无需改表结构)
如(但注意:COLLATE 必须加在子查询的字段上):
SELECT *
FROM wangchun
WHERE sfzh IN (
SELECT sfzh COLLATE utf8mb4_0900_ai_ci
FROM gaoqinghuji
);