首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 排序規則詳解:COLLATE 子句、校對集後綴含義與實戰選型

     編輯:MySQL 綜合教學

MySQL 排序規則深度解析:COLLATE、後綴語義、選型指南

COLLATE 定義字符串比較、排序的規則集,影響 ORDER BY、GROUP BY、DISTINCT、WHERE col = 'val'、索引順序等所有字符串操作。

一、COLLATE 語法位置

  • 庫級:CREATE DATABASE db CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
  • 表級:CREATE TABLE t (c VARCHAR(20)) CHARSET utf8mb4 COLLATE utf8mb4_bin;
  • 列級:CREATE TABLE t (c VARCHAR(20) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci);
  • 表達式級:SELECT 'a' = 'A' COLLATE utf8mb4_bin; -- 0 (區分大小寫)

二、校對集命名結構與後綴含義

格式:__,如 utf8mb4_general_ci、utf8mb4_unicode_520_ci、utf8mb4_zh_0900_ai_ci。

後綴全稱含義示例
_ciCase Insensitive不區分大小寫'a' = 'A'
_csCase Sensitive區分大小寫'a' != 'A'
_aiAccent Insensitive不區分重音/音調'é' = 'e'
_asAccent Sensitive區分重音'é' != 'e'
_ksKana Sensitive區分平/片假名日文專用
_wsWidth Sensitive區分全/半角'a' != 'a'
_binBinary二進制比較,最快,嚴格區分所有差異按字節碼序

三、常用校對集對比

校對集特點適用場景
utf8mb4_general_ci簡化 Unicode,速度快,不支援輔助平面部分排序規則通用業務、不需精準多語言排序
utf8mb4_unicode_ci標準 UCA(Unicode Collation Algorithm),支援多語言、重音、收尾字符多語言應用、需正確排序
utf8mb4_0900_ai_ci8.0 默認,基於 UCA 9.0.0,支援表情符號、更精準新項目推薦默認
utf8mb4_bin二進制,區分大小寫/重音/寬度,性能最好精確匹配、密碼驗證、Case Sensitive 需求
gbk_chinese_ciGBK 字符集默認,不區分大小寫舊系統、純中文環境

四、實戰選型建議

  1. 新項目:庫/表/列統一 utf8mb4_0900_ai_ci(8.0)或 utf8mb4_unicode_ci(5.7)。
  2. 需區分大小寫:列級指定 COLLATE utf8mb4_bin 或 _cs 後綴。
  3. 中文排序按拼音/筆畫:8.0+ 可用 utf8mb4_zh_0900_ai_ci(拼音)或 utf8mb4_zh_0900_as_cs(筆畫)。
  4. 避免混用:同一庫內不同表/列使用不同 COLLATE 會導致隱式轉換、索引失效、比較報錯(Illegal mix of collations)。

五、查看支援的校對集

SHOW COLLATION LIKE 'utf8mb4%';
SHOW COLLATION WHERE Charset = 'gbk';

總結

COLLATE 決定「字符串如何比較與排序」。選型原則:統一字符集 utf8mb4,校對集按業務語言需求選 _ci/_ai/_bin,全庫全表保持一致,避免隱式轉換帶來的性能損耗與邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved