透過 my.cnf 統一設定字符集是生產環境標準做法。本文給出生產級配置範本、關鍵參數解析、utf8_general_ci vs utf8_unicode_ci vs utf8_bin 深度對比與避坑指南。
my.cnf 字符集配置範本[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
# 連線層初始化
init_connect = 'SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
init_connect = 'SET collation_connection = utf8mb4_unicode_ci'
# 服務端預設
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 強制忽略客戶端字符集宣告,防亂碼
skip-character-set-client-handshake
關鍵避坑:[mysqld]區段不可使用default-character-set,會導致啟動報錯。
| 排序規則 | 特性 | 德語 ß 處理 | 大小寫敏感 | 效能 | 適用場景 |
|---|---|---|---|---|---|
utf8_general_ci | 簡化排序,速度快 | ß = s | 不敏感 | 最快 | 中文/英文通用、高併發 |
utf8_unicode_ci | UCA 標準排序,準確 | ß = ss | 不敏感 | 稍慢 | 多語言、歐洲語系嚴格排序 |
utf8_bin | 二進制比較 | ß ≠ s/ss | 敏感 | 最快 | 需區分大小寫、Base64、Hash 值 |
ß = s,œ = oe,適合亞洲語系、追求速度ß = ss,œ = oe,德語/法語排序正確'A' != 'a',索引可用於大小寫敏感查詢collation-server = utf8mb4_general_ci
-- 或 8.0+ 推薦
collation-server = utf8mb4_0900_ai_ci
SHOW VARIABLES LIKE '%char%';
SHOW VARIABLES LIKE '%collation%';
ALTER DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
useUnicode=true&characterEncoding=utf8mb4charset='utf8mb4'dsn "charset=utf8mb4,utf8"SET NAMES utf8mb4 COLLATE utf8mb4_general_ci統一字符集配置,從 Server 到 Client 到 Application,全鏈路一致,徹底告別亂碼。