MySQL 預設校對規則 (如 utf8mb4_general_ci、latin1_swedish_ci) 尾碼 _ci 代表 Case Insensitive。查詢 WHERE name LIKE 'a%' 會匹配 'Apple'、'apple'、'Ápple'。
CREATE TABLE t (
name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, -- 二進制比較,嚴格區分大小寫、重音
code VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_cs -- 區分大小寫,不區分重音
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
SELECT * FROM t WHERE name COLLATE utf8mb4_bin = 'Apple';
SELECT * FROM t WHERE name LIKE 'a%' COLLATE utf8mb4_general_cs;
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin -- 全域預設區分大小寫
-- 或資料庫級別
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
| 校對規則 | 大小寫 | 重音/變音 | 速度 | 適用語言 |
|---|---|---|---|---|
| utf8mb4_general_ci | 不敏感 | 不敏感 | 快 | 通用、多語言混雜 |
| utf8mb4_unicode_ci | 不敏感 | 敏感 (UCA 標準) | 稍慢 | 需正確排序的多語言 |
| utf8mb4_bin | 敏感 | 敏感 (二進制) | 最快 | 精確匹配、Base64、Hash、大小寫敏感業務 |
| utf8mb4_general_cs | 敏感 | 不敏感 | 中 | 僅需大小寫敏感 |
| utf8mb4_0900_ai_ci | 不敏感 | 不敏感 | 快 | MySQL 8.0 預設,Unicode 9.0 標準 |
| utf8mb4_0900_as_cs | 敏感 | 敏感 | 中 | 8.0 精確匹配推薦 |
utf8mb4_general_ci 下 'a' 與 'A' 視為重複,INSERT 會報 Duplicate entryString.equals 區分大小寫,DB 不區分,邏輯判斷出現分歧mysqldump 不含校對資訊時,還原到預設 _ci 庫導致行為改變utf8mb4_0900_ai_ci (8.0) / utf8mb4_unicode_ci (5.7),業務需大小寫敏感的欄位單獨指定 _bin 或 _cspt-online-schema-change 逐表修改校對規則,驗證應用相容性connectionCollation=utf8mb4_bin (JDBC) / charset=utf8mb4 (PDO) 避免隱式轉換