一、命名规则解析
这些 utf8mb4 排序规则的命名遵循统一格式:utf8mb4_[Unicode版本]_[重音规则]_[大小写规则]
0900:指 Unicode 9.0.0 标准,是 MySQL 8.0 引入的新版排序规则,比旧版更准确。ai/as:ai= Accent Insensitive(不区分重音)as= Accent Sensitive(区分重音)
ci/cs:ci= Case Insensitive(不区分大小写)cs= Case Sensitive(区分大小写)
bin:Binary,直接按字符的二进制编码值比较,最严格。- 带语言名(如
croatian_ci、czech_ci):针对特定语言的排序规则,遵循该语言的字母表和排序习惯。
二、核心规则对比
表格
| 排序规则 | 重音区分 | 大小写区分 | 特点 |
|---|---|---|---|
utf8mb4_0900_ai_ci |
不区分 | 不区分 | MySQL 8.0 默认,最宽松,适合通用场景 |
utf8mb4_0900_as_ci |
区分 | 不区分 | 重音敏感,大小写不敏感 |
utf8mb4_0900_as_cs |
区分 | 区分 | 重音和大小写都敏感,最严格的 Unicode 规则 |
utf8mb4_bin |
区分 | 区分 | 直接按二进制编码比较,不遵循 Unicode 排序 |
utf8mb4_croatian_ci 等 |
依语言 | 依语言 | 遵循特定语言的排序规则 |
三、典型场景差异
A和a:_ci规则下视为相等;_cs和bin规则下视为不同。
é和e:_ai规则下视为相等;_as和bin规则下视为不同。
- 排序顺序 :
_bin按编码值排序,可能不符合人类阅读习惯;0900系列按 Unicode 9.0 标准排序,更符合多语言场景。
四、选择建议
- 通用业务场景:优先使用
utf8mb4_0900_ai_ci(默认),兼容性和易用性最好。 - 需要严格区分重音或大小写:选择
utf8mb4_0900_as_ci或utf8mb4_0900_as_cs。 - 密码、哈希等敏感字段:使用
utf8mb4_bin,避免因排序规则导致的安全问题。 - 特定语言应用:选择对应语言的排序规则(如
utf8mb4_croatian_ci)。
五、 通用业务场景(绝大多数项目)
- 推荐规则 :
utf8mb4_0900_ai_ci - 适用场景 :
- 用户昵称、用户名、商品名称、文章标题等
- 中文、英文混合的普通文本存储与查询
- 优势 :
- 不区分大小写(
A=a) - 不区分重音(
é=e) - 符合 Unicode 9.0 排序,兼容性最好,是 MySQL 8.0 默认值
- 不区分大小写(
2. 需要区分重音的场景
- 推荐规则 :
utf8mb4_0900_as_ci - 适用场景 :
- 多语言人名、地名(如法语、西班牙语、德语等带重音的语言)
- 需要精确匹配重音字符的业务逻辑
- 特点 :
- 区分重音(
é≠e) - 不区分大小写(
A=a)
- 区分重音(
3. 需要严格区分大小写和重音的场景
- 推荐规则 :
utf8mb4_0900_as_cs - 适用场景 :
- 敏感字段校验(如验证码、唯一标识码)
- 严格的多语言文本比对
- 特点 :
- 区分重音(
é≠e) - 区分大小写(
A≠a) - 遵循 Unicode 9.0 排序规则
- 区分重音(
4. 密码、哈希等敏感字段
- 推荐规则 :
utf8mb4_bin - 适用场景 :
- 密码哈希、API Key、Token、唯一哈希值
- 特点 :
- 直接按二进制编码值比较,不遵循任何语言或 Unicode 排序
- 完全区分大小写和重音,避免排序规则导致的安全隐患
5. 特定语言本地化场景
- 推荐规则 :对应语言的规则,如:
- 克罗地亚语:
utf8mb4_croatian_ci - 捷克语:
utf8mb4_czech_ci - 丹麦语:
utf8mb4_danish_ci - 西班牙语:
utf8mb4_es_0900_ai_ci/utf8mb4_es_0900_as_cs
- 克罗地亚语:
- 适用场景 :
- 面向特定语言用户的应用,需要严格遵循该语言的字母表和排序习惯
- 本地化排序、搜索、索引优化
6. 旧项目兼容场景
- 推荐规则 :
- 若从 MySQL 5.7 升级,旧默认
utf8mb4_general_ci可逐步迁移到utf8mb4_0900_ai_ci - 若需保持完全兼容,可临时使用
utf8mb4_general_ci,但建议长期迁移
- 若从 MySQL 5.7 升级,旧默认
- 注意 :
utf8mb4_general_ci是旧版规则,排序准确性不如0900系列,且不支持最新 Unicode 字符
六、具体业务(比如是做电商、社交、还是后台管理系统)
一、先明确核心适配逻辑
我会按「通用型后台管理系统」「电商平台」「社交类应用」「多语言跨境应用」4 类主流业务场景,给出开箱即用的配置方案,你可直接对应自己的业务类型选用。
二、分场景定制配置方案
1. 通用型后台管理系统(企业内部 / ToB 系统)
核心需求:简单稳定、兼容中文 / 英文,查询便捷
表格
| 字段类型 | 推荐排序规则 | 配置说明 |
|---|---|---|
| 数据库 / 表默认 | utf8mb4_0900_ai_ci |
全局默认,覆盖 90% 字段需求 |
| 用户名 / 角色名 | utf8mb4_0900_ai_ci |
不区分大小写,方便用户登录(如Admin和admin视为同一用户) |
| 密码 / Token/API Key | utf8mb4_bin |
二进制严格匹配,避免因排序规则导致密码校验漏洞 |
| 备注 / 描述类文本 | utf8mb4_0900_ai_ci |
模糊查询更友好,无需区分重音 / 大小写 |
配置示例(MySQL 建表):
sql
CREATE TABLE sys_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
password VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
remark VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2. 电商平台(零售 / 商城)
核心需求:商品搜索友好、订单 / 支付字段精准
表格
| 字段类型 | 推荐排序规则 | 配置说明 |
|---|---|---|
| 数据库 / 表默认 | utf8mb4_0900_ai_ci |
全局默认,兼顾搜索和兼容性 |
| 商品名称 / 分类 | utf8mb4_0900_ai_ci |
搜索时手机和手机(全角 / 半角)、Apple和apple视为一致,提升体验 |
| 订单号 / 支付流水号 | utf8mb4_0900_as_cs |
严格区分大小写(如ORDER123a≠ORDER123A),避免订单号重复 |
| 客户姓名(多语言) | utf8mb4_0900_as_ci |
区分重音(如José≠Jose),保证海外用户姓名精准 |
配置示例(MySQL 建表):
sql
CREATE TABLE goods (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
goods_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
order_sn VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs NOT NULL UNIQUE,
customer_name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
3. 社交类应用(社区 / 聊天 / 内容平台)
核心需求:内容搜索灵活、用户昵称友好
表格
| 字段类型 | 推荐排序规则 | 配置说明 |
|---|---|---|
| 数据库 / 表默认 | utf8mb4_0900_ai_ci |
全局默认,适配多场景 |
| 用户昵称 / 评论内容 | utf8mb4_0900_ai_ci |
搜索评论时哈哈和哈哈(不同字体 / 全角)视为一致,提升搜索命中率 |
| 敏感内容校验字段 | utf8mb4_0900_as_cs |
严格匹配敏感词(如Abc≠abc),避免漏检 |
| 表情包 / 特殊字符字段 | utf8mb4_bin |
二进制存储,保证特殊字符精准展示和匹配 |
4. 多语言跨境应用(外贸 / 海外版 APP)
核心需求:适配本地化排序、精准区分语言特征
表格
| 字段类型 | 推荐排序规则 | 配置说明 |
|---|---|---|
| 欧洲小语种(克罗地亚 / 捷克) | utf8mb4_croatian_ci/utf8mb4_czech_ci |
遵循当地语言字母排序(如克罗地亚语ć的排序优先级) |
| 西班牙语 / 法语 | utf8mb4_es_0900_as_ci/utf8mb4_fr_0900_as_ci |
区分重音(如法语é≠e),符合本地化习惯 |
| 通用海外字段 | utf8mb4_0900_as_ci |
兼顾多语言重音区分,不区分大小写,平衡精准度和体验 |
三、全局配置优化建议
- 数据库级别统一配置(避免逐表配置):
sql
-- 创建数据库时指定默认规则
CREATE DATABASE your_db_name
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci;
-- 已有数据库修改默认规则
ALTER DATABASE your_db_name
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci;
- 特殊字段单独指定 :仅密码、流水号、敏感校验字段需单独指定
bin/as_cs,其余复用库默认即可。 - 升级兼容 :从 MySQL 5.7 升级的项目,先保留
utf8mb4_general_ci过渡,逐步迁移到utf8mb4_0900_ai_ci(更精准)。
总结
- 通用场景优先选
utf8mb4_0900_ai_ci,是兼容性和易用性的最优解; - 敏感字段(密码 / 流水号)必须用
utf8mb4_bin或utf8mb4_0900_as_cs,避免规则导致的匹配漏洞; - 多语言场景按本地化需求选对应语言规则,而非通用规则,提升用户体验。

