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
);
相关推荐
AIgorithmGEEK7 小时前
MySQL 索引全解(下):建、查、删实战与知识速查表
数据库·mysql·b+树·索引
Lost_the_wind7 小时前
MySQL学习笔记四
mysql
唠点键盘之外的10 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
云和恩墨10 小时前
数据库监控简史:监控不止于告警——从图表大爆发到健康管理闭环
数据库
ly768910 小时前
MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界
数据库·mongodb·事务·分片集群·快照隔离·写冲突
豆角焖肉10 小时前
Spring AOP 自定义注解实现系统操作日志
数据库·自定义注解·springaop·操作日志·aop 切面
金伟API102411 小时前
不会写复杂SQL怎么办?
数据库·sql
执笔为剑12 小时前
2.1.2-1、V8R3迁移到V8R6-Oracle兼容特性
数据库
geovindu12 小时前
sql:Search-Optimized SQL Queries using mysql 9.0
android·数据库·sql·mysql·数据库开发·数据库架构
for_ever_love__12 小时前
MySQL SELECT 与 WHERE 优化实战:可搜索条件、联合索引与执行计划
数据库·mysql·oracle·select·where·条件优化·查询优化技巧