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
);
相关推荐
2501_9012005313 小时前
mysql数据库主键类型对性能的影响_使用自增整数优于UUID
jvm·数据库·python
bqq1986102613 小时前
MySQL分库分表
数据结构·mysql
一直会游泳的小猫13 小时前
Claude Code 连 MySQL:保姆级教程
mysql·mcp·claude code
HalvmånEver13 小时前
MySQL的内置函数
linux·数据库·学习·mysql
m0_7364393013 小时前
Workerman5.0协程实战:PHP高并发新标准
jvm·数据库·python
2301_8180084413 小时前
golang如何实现消息过滤路由_golang消息过滤路由实现要点
jvm·数据库·python
鸡蛋灌Bean13 小时前
mybatis分页深入了解
java·数据库·mybatis
2401_8314194413 小时前
Python分类汇总怎么做_Crosstab交叉表与多条件联合频数频率统计
jvm·数据库·python
2301_7873124313 小时前
Go语言怎么用channel做信号通知_Go语言channel信号模式教程【完整】
jvm·数据库·python
小松加哲13 小时前
服务器LVM磁盘内部空闲空间无损扩容+挂载原理+MySQL Binlog自动清理完整实操
运维·mysql·服务器扩容