MySQL不兼容的字符集排序规则(collation)导致报错

在使用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
);
相关推荐
坚定信念,勇往无前2 小时前
mongodb的日志分割
数据库·mongodb
oradh5 小时前
Oracle TX 锁 Mode 4(Share)问题排查总结
数据库·oracle·tx 锁 mode 4·oracle tx 锁
2601_962065255 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
yi.Ist6 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
阿kun要赚马内6 小时前
MySQL 索引基础
后端·mysql
2601_963282777 小时前
工程项目、政企采购为什么优先选择对讲机批量采购?
数据库
Doraemomo7 小时前
SQLite数据库
数据库·sqlite
2601_962177137 小时前
【MySQL篇】聚合查询,联合查询
android·java·mysql
云贝教育-郑老师7 小时前
MySQL 的“黑匣子“:Performance Schema 把数据库内部变成一张可查的表
数据库·mysql