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
);
相关推荐
软件派7 小时前
生产动态数据智能风控:阈值判别、趋势预测、异常识别算法工程落地实战
前端·数据库·算法
ss27315 小时前
PostgreSQL常见索引问题与解决方案
数据库·postgresql
小徐不徐说15 小时前
序列化与反序列化:把 C++ 对象可靠地保存下来
开发语言·数据库·c++·php
瀚高PG实验室17 小时前
发布端逻辑复制槽消失
数据库·postgresql·瀚高数据库
ss27317 小时前
PostgreSQL慢查询定位与优化
数据库·postgresql
香蕉大香蕉(06敬畏市场)17 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
smilejingwei18 小时前
TRAE 插件上新 | SQLazy:让 AI 写出可信复杂 SQL
数据库·人工智能·sql
我要见SA姐118 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·数据库·机器学习·oracle·回归
IT规划师19 小时前
百亿数据写入 MySQL:空间降维 × IO 降维 × 工程兜底
mysql·sqlsugar·.net10