首页  

utf8mb4_general_ci 和 utf8mb4_unicode_ci     所属分类 mysql 浏览量 13
utf8mb4_general_ci 和 utf8mb4_unicode_ci 
是 utf8mb4 字符集下最常用的两种排序 / 比较规则,
核心差异体现在排序逻辑、语言适配、性能三方面。

utf8mb4_unicode_ci(或 520 版本)是最优选择,兼顾语言正确性和性能
仅在极简场景下考虑 utf8mb4_general_ci


`field1` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL,
`field2` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL ,

select * from test_001 where field1 <> field2
报错 
java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '!='



一、核心概念:utf8mb4 与排序规则(_ci 后缀)

utf8mb4:
MySQL 中真正支持完整 UTF-8 的字符集(可存储 4 字节的 emoji、特殊汉字等,而旧版 utf8 仅支持 3 字节)。
_ci:Case Insensitive(大小写不敏感),即查询时 A 和 a 视为相同;
_cs 是大小写敏感,_bin 是二进制比较(严格按编码值)


二、关键差异对比

维度/utf8mb4_general_ci	/ utf8mb4_unicode_ci

排序规则	
基于简单字符编码值的通用排序(非语言专属),规则粗糙	
基于 Unicode 标准的排序算法(Unicode Collation Algorithm, UCA),适配多语言

语言适配性	
差:对重音、特殊字符处理不符合语言习惯(如德语 ß 不视为 ss,法语重音字符排序混乱)	
优:支持语言特定排序(如西班牙语 ñ 排在 n 后,德语 ß 等效 ss)

大小写 / 重音处理	
仅基础大小写不敏感,重音不忽略(如 é ≠ e)	
可配置忽略重音(需结合 utf8mb4_unicode_520_ci 等新版本),更符合自然语言习惯


性能	
快:排序规则简单,计算成本低	
稍慢:规则复杂,需处理语言特殊逻辑(MySQL 5.5+ 优化后差距已极小)

兼容性	
老版本 MySQL 默认,兼容性广	
MySQL 4.1+ 支持,5.5+ 推荐使用


三、典型场景示例

1. 排序差异(以欧洲语言为例)
utf8mb4_general_ci:
排序时 ä 直接按编码值排在 z 后,不符合德语习惯;ñ 和 n 视为相同(编码值接近)。
utf8mb4_unicode_ci:
德语中 ä 等效 ae 参与排序,西班牙语 ñ 单独排在 n 和 o 之间,符合语言规范。

2. 查询匹配差异

-- 表结构:test (name VARCHAR(20) CHARACTER SET utf8mb4 COLLATE 规则)
INSERT INTO test (name) VALUES ('café'), ('cafe'), ('Café');

-- 用 utf8mb4_general_ci 查询
SELECT * FROM test WHERE name = 'cafe'; 
-- 结果:仅匹配 'cafe'(重音 `é` ≠ `e`)

-- 用 utf8mb4_unicode_ci(或 utf8mb4_unicode_520_ci)
SELECT * FROM test WHERE name = 'cafe'; 
-- 结果:匹配 'café'、'cafe'、'Café'(忽略重音+大小写)


四、选型建议
优先选 utf8mb4_unicode_ci(或 utf8mb4_unicode_520_ci)的场景:
业务涉及多语言(如欧洲、拉美语言,或需要正确处理重音 / 特殊字符);
对排序 / 匹配的语言规范性要求高(如电商商品名称、用户昵称的排序);
现代 MySQL 版本(5.5+),性能损耗可忽略。
可选 utf8mb4_general_ci 的场景:
仅处理纯英文 / 基础中文,无特殊字符 / 重音需求;
极老版本 MySQL(4.1 以下),或对性能有极致要求(如超大规模数据排序)


五、补充:utf8mb4_unicode_520_ci
MySQL 5.6+ 新增的 utf8mb4_unicode_520_ci 是 utf8mb4_unicode_ci 的升级版,
基于 Unicode 5.2.0 标准,修复了更多语言排序问题(如中文拼音排序、日语假名排序),推荐优先使用。


六、修改表 / 字段的排序规则

-- 修改表的默认排序规则
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改字段的排序规则
ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

修改 MySQL 字段的排序规则(Collation)不会改变字段存储的原始数据,
但会影响数据的比较、排序、查询匹配逻辑,以及极少数情况下的 “字符合法性校验”(几乎可忽略)

上一篇     下一篇
《道德经》精简版 500字

量化策略研究员知识点和技能

量化策略研究员所需的编程技能

《宽客:华尔街顶级数量金融大师的另类人生》精华笔记

量化策略分类

量化策略评估指标