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


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

