Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql8 utf8mb4字符集排序

mysql8 utf8mb4字符集的排序规则

作者:花花鱼

本文详细解析了MySQL中UTF8MB4字符集的排序规则,推荐使用utf8mb4_0900_ai_ci作为通用业务场景的排序规则,确保兼容性和易用性,对于敏感字段如密码和流水号,推荐使用utf8mb4_bin或utf8mb4_0900_as_cs,下面就来详细介绍一下

一、命名规则解析

这些 utf8mb4 排序规则的命名遵循统一格式:utf8mb4_[Unicode版本]_[重音规则]_[大小写规则]

二、核心规则对比

排序规则重音区分大小写区分特点
utf8mb4_0900_ai_ci不区分不区分MySQL 8.0 默认,最宽松,适合通用场景
utf8mb4_0900_as_ci区分不区分重音敏感,大小写不敏感
utf8mb4_0900_as_cs区分区分重音和大小写都敏感,最严格的 Unicode 规则
utf8mb4_bin区分区分直接按二进制编码比较,不遵循 Unicode 排序
utf8mb4_croatian_ci 等依语言依语言遵循特定语言的排序规则

三、典型场景差异

四、选择建议

五、 通用业务场景(绝大多数项目)

需要区分重音的场景

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

密码、哈希等敏感字段

特定语言本地化场景

旧项目兼容场景

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

一、先明确核心适配逻辑

我会按「通用型后台管理系统」「电商平台」「社交类应用」「多语言跨境应用」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字符集排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文