mysql8 utf8mb4字符集的排序規(guī)則
一、命名規(guī)則解析
這些 utf8mb4 排序規(guī)則的命名遵循統(tǒng)一格式:utf8mb4_[Unicode版本]_[重音規(guī)則]_[大小寫(xiě)規(guī)則]
- 0900:指 Unicode 9.0.0 標(biāo)準(zhǔn),是 MySQL 8.0 引入的新版排序規(guī)則,比舊版更準(zhǔn)確。
- ai / as:
- ai = Accent Insensitive(不區(qū)分重音)
- as = Accent Sensitive(區(qū)分重音)
- ci / cs:
- ci = Case Insensitive(不區(qū)分大小寫(xiě))
- cs = Case Sensitive(區(qū)分大小寫(xiě))
- bin:Binary,直接按字符的二進(jìn)制編碼值比較,最嚴(yán)格。
- 帶語(yǔ)言名(如 croatian_ci、czech_ci):針對(duì)特定語(yǔ)言的排序規(guī)則,遵循該語(yǔ)言的字母表和排序習(xí)慣。
二、核心規(guī)則對(duì)比
| 排序規(guī)則 | 重音區(qū)分 | 大小寫(xiě)區(qū)分 | 特點(diǎn) |
|---|---|---|---|
| utf8mb4_0900_ai_ci | 不區(qū)分 | 不區(qū)分 | MySQL 8.0 默認(rèn),最寬松,適合通用場(chǎng)景 |
| utf8mb4_0900_as_ci | 區(qū)分 | 不區(qū)分 | 重音敏感,大小寫(xiě)不敏感 |
| utf8mb4_0900_as_cs | 區(qū)分 | 區(qū)分 | 重音和大小寫(xiě)都敏感,最嚴(yán)格的 Unicode 規(guī)則 |
| utf8mb4_bin | 區(qū)分 | 區(qū)分 | 直接按二進(jìn)制編碼比較,不遵循 Unicode 排序 |
| utf8mb4_croatian_ci 等 | 依語(yǔ)言 | 依語(yǔ)言 | 遵循特定語(yǔ)言的排序規(guī)則 |
三、典型場(chǎng)景差異
- A 和 a:
- _ci 規(guī)則下視為相等;_cs 和 bin 規(guī)則下視為不同。
- é 和 e:
- _ai 規(guī)則下視為相等;_as 和 bin 規(guī)則下視為不同。
- 排序順序:
- _bin 按編碼值排序,可能不符合人類閱讀習(xí)慣;
- 0900 系列按 Unicode 9.0 標(biāo)準(zhǔn)排序,更符合多語(yǔ)言場(chǎng)景。
四、選擇建議
- 通用業(yè)務(wù)場(chǎng)景:優(yōu)先使用 utf8mb4_0900_ai_ci(默認(rèn)),兼容性和易用性最好。
- 需要嚴(yán)格區(qū)分重音或大小寫(xiě):選擇 utf8mb4_0900_as_ci 或 utf8mb4_0900_as_cs。
- 密碼、哈希等敏感字段:使用 utf8mb4_bin,避免因排序規(guī)則導(dǎo)致的安全問(wèn)題。
- 特定語(yǔ)言應(yīng)用:選擇對(duì)應(yīng)語(yǔ)言的排序規(guī)則(如 utf8mb4_croatian_ci)。
五、 通用業(yè)務(wù)場(chǎng)景(絕大多數(shù)項(xiàng)目)
- 推薦規(guī)則:utf8mb4_0900_ai_ci
- 適用場(chǎng)景:
- 用戶昵稱、用戶名、商品名稱、文章標(biāo)題等
- 中文、英文混合的普通文本存儲(chǔ)與查詢
- 優(yōu)勢(shì):
- 不區(qū)分大小寫(xiě)(A = a)
- 不區(qū)分重音(é = e)
- 符合 Unicode 9.0 排序,兼容性最好,是 MySQL 8.0 默認(rèn)值
需要區(qū)分重音的場(chǎng)景
- 推薦規(guī)則:utf8mb4_0900_as_ci
- 適用場(chǎng)景:
- 多語(yǔ)言人名、地名(如法語(yǔ)、西班牙語(yǔ)、德語(yǔ)等帶重音的語(yǔ)言)
- 需要精確匹配重音字符的業(yè)務(wù)邏輯
- 特點(diǎn):
- 區(qū)分重音(é ≠ e)
- 不區(qū)分大小寫(xiě)(A = a)
需要嚴(yán)格區(qū)分大小寫(xiě)和重音的場(chǎng)景
- 推薦規(guī)則:utf8mb4_0900_as_cs
- 適用場(chǎng)景:
- 敏感字段校驗(yàn)(如驗(yàn)證碼、唯一標(biāo)識(shí)碼)
- 嚴(yán)格的多語(yǔ)言文本比對(duì)
- 特點(diǎn):
- 區(qū)分重音(é ≠ e)
- 區(qū)分大小寫(xiě)(A ≠ a)
- 遵循 Unicode 9.0 排序規(guī)則
密碼、哈希等敏感字段
- 推薦規(guī)則:utf8mb4_bin
- 適用場(chǎng)景:
- 密碼哈希、API Key、Token、唯一哈希值
- 特點(diǎn):
- 直接按二進(jìn)制編碼值比較,不遵循任何語(yǔ)言或 Unicode 排序
- 完全區(qū)分大小寫(xiě)和重音,避免排序規(guī)則導(dǎo)致的安全隱患
特定語(yǔ)言本地化場(chǎng)景
- 推薦規(guī)則:對(duì)應(yīng)語(yǔ)言的規(guī)則,如:
- 克羅地亞語(yǔ):utf8mb4_croatian_ci
- 捷克語(yǔ):utf8mb4_czech_ci
- 丹麥語(yǔ):utf8mb4_danish_ci
- 西班牙語(yǔ):utf8mb4_es_0900_ai_ci / utf8mb4_es_0900_as_cs
- 適用場(chǎng)景:
- 面向特定語(yǔ)言用戶的應(yīng)用,需要嚴(yán)格遵循該語(yǔ)言的字母表和排序習(xí)慣
- 本地化排序、搜索、索引優(yōu)化
舊項(xiàng)目兼容場(chǎng)景
- 推薦規(guī)則:
- 若從 MySQL 5.7 升級(jí),舊默認(rèn) utf8mb4_general_ci 可逐步遷移到 utf8mb4_0900_ai_ci
- 若需保持完全兼容,可臨時(shí)使用 utf8mb4_general_ci,但建議長(zhǎng)期遷移
- 注意:
- utf8mb4_general_ci 是舊版規(guī)則,排序準(zhǔn)確性不如 0900 系列,且不支持最新 Unicode 字符
六、具體業(yè)務(wù)(比如是做電商、社交、還是后臺(tái)管理系統(tǒng))
一、先明確核心適配邏輯
我會(huì)按「通用型后臺(tái)管理系統(tǒng)」「電商平臺(tái)」「社交類應(yīng)用」「多語(yǔ)言跨境應(yīng)用」4 類主流業(yè)務(wù)場(chǎng)景,給出開(kāi)箱即用的配置方案,你可直接對(duì)應(yīng)自己的業(yè)務(wù)類型選用。
二、分場(chǎng)景定制配置方案
1. 通用型后臺(tái)管理系統(tǒng)(企業(yè)內(nèi)部 / ToB 系統(tǒng))
核心需求:簡(jiǎn)單穩(wěn)定、兼容中文 / 英文,查詢便捷
| 字段類型 | 推薦排序規(guī)則 | 配置說(shuō)明 |
|---|---|---|
| 數(shù)據(jù)庫(kù) / 表默認(rèn) | utf8mb4_0900_ai_ci | 全局默認(rèn),覆蓋 90% 字段需求 |
| 用戶名 / 角色名 | utf8mb4_0900_ai_ci | 不區(qū)分大小寫(xiě),方便用戶登錄(如Admin和admin視為同一用戶) |
| 密碼 / Token/API Key | utf8mb4_bin | 二進(jìn)制嚴(yán)格匹配,避免因排序規(guī)則導(dǎo)致密碼校驗(yàn)漏洞 |
| 備注 / 描述類文本 | utf8mb4_0900_ai_ci | 模糊查詢更友好,無(wú)需區(qū)分重音 / 大小寫(xiě) |
配置示例(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. 電商平臺(tái)(零售 / 商城)
核心需求:商品搜索友好、訂單 / 支付字段精準(zhǔn)
| 字段類型 | 推薦排序規(guī)則 | 配置說(shuō)明 |
|---|---|---|
| 數(shù)據(jù)庫(kù) / 表默認(rèn) | utf8mb4_0900_ai_ci | 全局默認(rèn),兼顧搜索和兼容性 |
| 商品名稱 / 分類 | utf8mb4_0900_ai_ci | 搜索時(shí)手機(jī)和手機(jī)(全角 / 半角)、Apple和apple視為一致,提升體驗(yàn) |
| 訂單號(hào) / 支付流水號(hào) | utf8mb4_0900_as_cs | 嚴(yán)格區(qū)分大小寫(xiě)(如ORDER123a≠ORDER123A),避免訂單號(hào)重復(fù) |
| 客戶姓名(多語(yǔ)言) | utf8mb4_0900_as_ci | 區(qū)分重音(如José≠Jose),保證海外用戶姓名精準(zhǔn) |
配置示例(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. 社交類應(yīng)用(社區(qū) / 聊天 / 內(nèi)容平臺(tái))
核心需求:內(nèi)容搜索靈活、用戶昵稱友好
| 字段類型 | 推薦排序規(guī)則 | 配置說(shuō)明 |
|---|---|---|
| 數(shù)據(jù)庫(kù) / 表默認(rèn) | utf8mb4_0900_ai_ci | 全局默認(rèn),適配多場(chǎng)景 |
| 用戶昵稱 / 評(píng)論內(nèi)容 | utf8mb4_0900_ai_ci | 搜索評(píng)論時(shí)哈哈和哈哈(不同字體 / 全角)視為一致,提升搜索命中率 |
| 敏感內(nèi)容校驗(yàn)字段 | utf8mb4_0900_as_cs | 嚴(yán)格匹配敏感詞(如Abc≠abc),避免漏檢 |
| 表情包 / 特殊字符字段 | utf8mb4_bin | 二進(jìn)制存儲(chǔ),保證特殊字符精準(zhǔn)展示和匹配 |
4. 多語(yǔ)言跨境應(yīng)用(外貿(mào) / 海外版 APP)
核心需求:適配本地化排序、精準(zhǔn)區(qū)分語(yǔ)言特征
| 字段類型 | 推薦排序規(guī)則 | 配置說(shuō)明 |
|---|---|---|
| 歐洲小語(yǔ)種(克羅地亞 / 捷克) | utf8mb4_croatian_ci/utf8mb4_czech_ci | 遵循當(dāng)?shù)卣Z(yǔ)言字母排序(如克羅地亞語(yǔ)?的排序優(yōu)先級(jí)) |
| 西班牙語(yǔ) / 法語(yǔ) | utf8mb4_es_0900_as_ci/utf8mb4_fr_0900_as_ci | 區(qū)分重音(如法語(yǔ)é≠e),符合本地化習(xí)慣 |
| 通用海外字段 | utf8mb4_0900_as_ci | 兼顧多語(yǔ)言重音區(qū)分,不區(qū)分大小寫(xiě),平衡精準(zhǔn)度和體驗(yàn) |
三、全局配置優(yōu)化建議
- 數(shù)據(jù)庫(kù)級(jí)別統(tǒng)一配置(避免逐表配置):
-- 創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指定默認(rèn)規(guī)則 CREATE DATABASE your_db_name DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_0900_ai_ci; -- 已有數(shù)據(jù)庫(kù)修改默認(rèn)規(guī)則 ALTER DATABASE your_db_name DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_0900_ai_ci;
- 特殊字段單獨(dú)指定:僅密碼、流水號(hào)、敏感校驗(yàn)字段需單獨(dú)指定
bin/as_cs,其余復(fù)用庫(kù)默認(rèn)即可。 - 升級(jí)兼容:從 MySQL 5.7 升級(jí)的項(xiàng)目,先保留
utf8mb4_general_ci過(guò)渡,逐步遷移到utf8mb4_0900_ai_ci(更精準(zhǔn))。
總結(jié)
- 通用場(chǎng)景優(yōu)先選utf8mb4_0900_ai_ci,是兼容性和易用性的最優(yōu)解;
- 敏感字段(密碼 / 流水號(hào))必須用utf8mb4_bin或utf8mb4_0900_as_cs,避免規(guī)則導(dǎo)致的匹配漏洞;
- 多語(yǔ)言場(chǎng)景按本地化需求選對(duì)應(yīng)語(yǔ)言規(guī)則,而非通用規(guī)則,提升用戶體驗(yàn)。


到此這篇關(guān)于mysql8 utf8mb4字符集的排序規(guī)則的文章就介紹到這了,更多相關(guān)mysql8 utf8mb4字符集排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
DBeaver連接mysql數(shù)據(jù)庫(kù)錯(cuò)誤圖文解決方案
這篇文章主要給大家介紹了關(guān)于DBeaver連接mysql數(shù)據(jù)庫(kù)錯(cuò)誤解決方案的相關(guān)資料,DBeaver是免費(fèi)、開(kāi)源、通用數(shù)據(jù)庫(kù)工具,是許多開(kāi)發(fā)開(kāi)發(fā)人員和數(shù)據(jù)庫(kù)管理員的所選,需要的朋友可以參考下2023-11-11
macOS 下的 MySQL 8.0.17 安裝與簡(jiǎn)易配置教程圖解
這篇文章主要介紹了macOS 下的 MySQL 8.0.17 安裝與簡(jiǎn)易配置教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
mysql 復(fù)制表結(jié)構(gòu)和數(shù)據(jù)實(shí)例代碼
這篇文章主要介紹了mysql 復(fù)制表結(jié)構(gòu)和數(shù)據(jù)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10
MySQL錯(cuò)誤“Specified key was too long; max key length is 1000 b
今天在為數(shù)據(jù)庫(kù)中的某兩個(gè)字段設(shè)置unique索引的時(shí)候,出現(xiàn)了Specified key was too long; max key length is 1000 bytes錯(cuò)誤2010-08-08
SQL使用ROW_NUMBER() OVER函數(shù)生成序列號(hào)
這篇文章主要介紹了SQL使用ROW_NUMBER() OVER函數(shù)生成序列號(hào),ROW_NUMBER()從1開(kāi)始,為每一條分組記錄返回一個(gè)數(shù)字,下面文章內(nèi)容具有一定的參考價(jià)值,需要的小伙伴可以參考一下2021-12-12
windows環(huán)境下mysql數(shù)據(jù)庫(kù)的主從同步備份步驟(單向同步)
本文主要是向大家描述的是在windows環(huán)境之下實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的主從同步備份的正確操作方案,以下就是文章的詳細(xì)內(nèi)容描述2011-05-05
深入淺析MySQL從刪庫(kù)到跑路_高級(jí)(一)——數(shù)據(jù)完整性
數(shù)據(jù)完整性是指數(shù)據(jù)的可靠性和準(zhǔn)確性,數(shù)據(jù)完整性類型有四種,本文給大家提到,接下來(lái)通過(guò)本文給大家介紹MySQL從刪庫(kù)到跑路的內(nèi)容分析,感興趣的朋友跟隨小編一起看看吧2018-11-11

