| 維度 | utf8_unicode_ci | utf8_general_ci |
|---|---|---|
| Unicode 標準支援 | 部分支援 UCA (Unicode Collation Algorithm) | 舊版簡易實現,不支援擴展 |
| 字符展開 | 支援 (如 ß = ss) | 不支援 (ß = s) |
| 組合字符 | 部分支援 | 不支援 |
| 比較速度 | 較慢 (複雜規則) | 較快 (逐字節比較) |
| 適用語言 | 多語言、德語、法語、越南語等 | 英文、簡單西歐語系 |
-- 兩者相同
Ä = A, Ö = O, Ü = U
-- 不同點
ß (德語銳音符)
utf8_general_ci : ß = s
utf8_unicode_ci : ß = ss -- 符合德語拼寫規範
WHERE col = 'val' : general 快 ~5-10% (微秒級差異,通常可忽略)。ORDER BY col : 差距擴大至 10-20%。unicode 稍慢。-- 修改資料庫預設
ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表預設 (不轉換現有欄位)
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 轉換現有欄位 (重建表,大表用 pt-osc)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8_general_ci 是歷史產物,犧牲多語言正確性換取微小速度優勢。現代應用**預設選 utf8mb4_unicode_ci (或 8.0 utf8mb4_0900_ai_ci)**,唯有極端效能敏感且純 ASCII 場景才考慮 general。準確性是功能正確性的基石,不應為毫秒級速度妥協。