mysql8 utf8mb4字符集的排序规则

 更新时间:2026年02月19日 09:30:23   作者:花花鱼  
本文详细解析了MySQL中UTF8MB4字符集的排序规则,推荐使用utf8mb4_0900_ai_ci作为通用业务场景的排序规则,确保兼容性和易用性,对于敏感字段如密码和流水号,推荐使用utf8mb4_bin或utf8mb4_0900_as_cs,下面就来详细介绍一下

一、命名规则解析

这些 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 默认值

需要区分重音的场景

  • 推荐规则:utf8mb4_0900_as_ci
  • 适用场景:
    • 多语言人名、地名(如法语、西班牙语、德语等带重音的语言)
    • 需要精确匹配重音字符的业务逻辑
  • 特点:
    • 区分重音(é ≠ e)
    • 不区分大小写(A = a)

需要严格区分大小写和重音的场景

  • 推荐规则:utf8mb4_0900_as_cs
  • 适用场景:
    • 敏感字段校验(如验证码、唯一标识码)
    • 严格的多语言文本比对
  • 特点:
    • 区分重音(é ≠ e)
    • 区分大小写(A ≠ a)
    • 遵循 Unicode 9.0 排序规则

密码、哈希等敏感字段

  • 推荐规则:utf8mb4_bin
  • 适用场景:
    • 密码哈希、API Key、Token、唯一哈希值
  • 特点:
    • 直接按二进制编码值比较,不遵循任何语言或 Unicode 排序
    • 完全区分大小写和重音,避免排序规则导致的安全隐患

特定语言本地化场景

  • 推荐规则:对应语言的规则,如:
    • 克罗地亚语:utf8mb4_croatian_ci
    • 捷克语:utf8mb4_czech_ci
    • 丹麦语:utf8mb4_danish_ci
    • 西班牙语:utf8mb4_es_0900_ai_ci / utf8mb4_es_0900_as_cs
  • 适用场景:
    • 面向特定语言用户的应用,需要严格遵循该语言的字母表和排序习惯
    • 本地化排序、搜索、索引优化

旧项目兼容场景

  • 推荐规则:
    • 若从 MySQL 5.7 升级,旧默认 utf8mb4_general_ci 可逐步迁移到 utf8mb4_0900_ai_ci
    • 若需保持完全兼容,可临时使用 utf8mb4_general_ci,但建议长期迁移
  • 注意:
    • utf8mb4_general_ci 是旧版规则,排序准确性不如 0900 系列,且不支持最新 Unicode 字符

六、具体业务(比如是做电商、社交、还是后台管理系统)

一、先明确核心适配逻辑

我会按「通用型后台管理系统」「电商平台」「社交类应用」「多语言跨境应用」4 类主流业务场景,给出开箱即用的配置方案,你可直接对应自己的业务类型选用。

二、分场景定制配置方案

1. 通用型后台管理系统(企业内部 / ToB 系统)

核心需求:简单稳定、兼容中文 / 英文,查询便捷

字段类型推荐排序规则配置说明
数据库 / 表默认utf8mb4_0900_ai_ci全局默认,覆盖 90% 字段需求
用户名 / 角色名utf8mb4_0900_ai_ci不区分大小写,方便用户登录(如Admin和admin视为同一用户)
密码 / Token/API Keyutf8mb4_bin二进制严格匹配,避免因排序规则导致密码校验漏洞
备注 / 描述类文本utf8mb4_0900_ai_ci模糊查询更友好,无需区分重音 / 大小写

配置示例(MySQL 建表)

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 建表)

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兼顾多语言重音区分,不区分大小写,平衡精准度和体验

三、全局配置优化建议

  1. 数据库级别统一配置(避免逐表配置):
-- 创建数据库时指定默认规则
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;
  1. 特殊字段单独指定:仅密码、流水号、敏感校验字段需单独指定bin/as_cs,其余复用库默认即可。
  2. 升级兼容:从 MySQL 5.7 升级的项目,先保留utf8mb4_general_ci过渡,逐步迁移到utf8mb4_0900_ai_ci(更精准)。

总结

  1. 通用场景优先选utf8mb4_0900_ai_ci,是兼容性和易用性的最优解;
  2. 敏感字段(密码 / 流水号)必须用utf8mb4_bin或utf8mb4_0900_as_cs,避免规则导致的匹配漏洞;
  3. 多语言场景按本地化需求选对应语言规则,而非通用规则,提升用户体验。

到此这篇关于mysql8 utf8mb4字符集的排序规则的文章就介绍到这了,更多相关mysql8 utf8mb4字符集排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL配置文件无法修改的解决方法(Win10)

    MySQL配置文件无法修改的解决方法(Win10)

    这篇文章主要为大家详细介绍了MySQL配置文件无法修改的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 一文带你了解MySQL字符集和比较规则

    一文带你了解MySQL字符集和比较规则

    前段时间往MySQL中存入emoji表情或生僻字、繁体字时,报错无法添加,研究后发现这是字符集编码的问题,下面这篇文章主要给大家介绍了关于MySQL字符集和比较规则的相关资料,需要的朋友可以参考下
    2022-12-12
  • MySQL间隙锁与排他锁的区别全解析

    MySQL间隙锁与排他锁的区别全解析

    本文给大家介绍了MySQL间隙锁与排他锁的区别,文章提到了间隙锁在实际工作中的应用场景和注意事项,建议根据具体需求选择合适的锁机制,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • MySQL数据误删或者误更新如何恢复详细步骤(一看就会)

    MySQL数据误删或者误更新如何恢复详细步骤(一看就会)

    本文主要为开发人员提供在测试环境中恢复近期误操作的少量数据的方法,首先介绍了如何下载并安装MyFlash工具,然后详细讲解了如何利用该工具和MySQL的binlog日志来恢复误删或误更新的数据,介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • mysql最左前缀法则导致索引失效的解决

    mysql最左前缀法则导致索引失效的解决

    最左前缀是在使用innodb存储引擎索引时,需要遵守的法则,本文主要介绍了mysql最左前缀法则导致索引失效的解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Mysql InnoDB 的内存结构详情

    Mysql InnoDB 的内存结构详情

    这篇文章主要介绍了Mysql InnoDB的内存结构详情,InnoDB存储引擎的逻辑存储结构是什么呢,下面我们就一起进入文章了解更多详细内容吧,感兴趣的小伙伴可以参考一下
    2022-05-05
  • MySQL连接异常:Communications link failure问题及解决

    MySQL连接异常:Communications link failure问题及解决

    这篇文章主要介绍了MySQL连接异常:Communications link failure问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • MySQL中的引号和反引号的区别与用法详解

    MySQL中的引号和反引号的区别与用法详解

    这个问题是我在学习数据库的时候遇到的一个问题,我当时并不能理解下图中的一些情况,后来我也请教了一位大佬给我解答,最后在大佬和度娘的帮助下我大概理解了这个反引号的东西
    2021-10-10
  • mysql kill进程后出现killed死锁问题及解决

    mysql kill进程后出现killed死锁问题及解决

    这篇文章主要介绍了mysql kill进程后出现killed死锁问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • DBeaver如何实现导入excel中的大量数据

    DBeaver如何实现导入excel中的大量数据

    使用DBeaver导入Excel数据需先将文件转换为CSV格式,详细步骤包括:将Excel文件另存为CSV,确保列名与数据库表字段对应,然后在DBeaver中创建表和导入CSV文件,注意选择正确的编码格式以防中文乱码
    2024-10-10

最新评论