首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 字符集與校對規則完整指南:utf8、utf8mb4、_ci、_bin 選型避坑

     編輯:MySQL 資料庫相關知識

核心概念

術語定義
字符集符號集合與編碼映射(如 utf8:1-3 字節,utf8mb4:1-4 字節支援 Emoji)
校對規則字符集內比較、排序規則(如 utf8_general_ci 不分大小寫,utf8_bin 二進制比較)
命名慣例<charset>_<language>_<suffix>,後綴:_ci不敏感、_cs敏感、_bin二進制

四級默認層級

  1. 服務器級:character_set_server、collation_server
  2. 資料庫級:CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  3. 表級:CREATE TABLE t (...) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  4. 連接級:SET NAMES utf8mb4; 或連線參數 characterEncoding=utf8mb4

優先級:連接 > 表 > 資料庫 > 服務器。

常見校對規則對比

校對規則特性適用場景
utf8mb4_general_ci速度快、不分大小寫、不支援多語言精細排序通用業務、舊專案相容
utf8mb4_unicode_ci遵循 Unicode 標準、支援多語言排序、略慢多語言應用、精確排序需求
utf8mb4_0900_ai_ci8.0 預設、基於 Unicode 9.0、支援表情符號權重MySQL 8.0+ 新專案首選
utf8mb4_bin二進制比較、嚴格區分大小寫、效能最高大小寫敏感業務、索引精確匹配

實戰建議

  • ✅ **新專案統一使用 utf8mb4 + utf8mb4_0900_ai_ci(8.0)或 utf8mb4_unicode_ci(5.7)**
  • ✅ 連接層強制設定:SET NAMES utf8mb4 / JDBC characterEncoding=utf8mb4 / PHP mysqli_set_charset($link, 'utf8mb4')
  • ✅ 避免隱式轉換:建表、建庫顯式指定 CHARSET/COLLATE,不依賴默認值。
  • ⚠️ utf8(MySQL 別名)實為 utf8mb3,**不支援 Emoji/補充平面字符**,必須遷移至 utf8mb4。
  • ⚠️ utf8_general_ci 會將 ß = ss、œ = oe 等視為相等,若需嚴格區分請用 _bin 或 _unicode_ci。

查看與診斷指令

SHOW CHARACTER SET;
SHOW COLLATION LIKE 'utf8mb4%';
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
SELECT CHARSET(column), COLLATION(column) FROM table LIMIT 1;

遷移 utf8 → utf8mb4 檢查清單

  1. 修改 my.cnf:character-set-server=utf8mb4、collation-server=utf8mb4_unicode_ci
  2. ALTER DATABASE db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
  3. ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  4. 檢查索引長度:VARCHAR(255) 在 utf8mb4 佔 767 字節,InnoDB 單列索引限制 767(5.7)或 3072(8.0),超長需調整列長度或啟用 innodb_large_prefix=ON。
  5. 應用層連接參數同步修改。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved