三大編碼層級
MySQL 透過三個層級管理字符編碼,正確設定可避免亂碼:
| 層級 | 系統變數 | 說明 |
| 客戶端 | character_set_client | 客戶端發送 SQL 時使用的編碼 |
| 連接層 | character_set_connection | Server 接收後轉換為此編碼進行內部處理 |
| 伺服器/資料庫/表/欄位 | character_set_server / character_set_database / 表預設 / 欄位預設 | 資料實際儲存編碼,層層繼承 |
結果集編碼
查詢結果回傳給客戶端時,會依 character_set_results 轉碼。
建議設定策略
- 統一使用 UTF-8(或 utf8mb4):資料庫、表、欄位預設皆設為
utf8mb4,支援完整 Unicode(含 Emoji)。
- 連接時指定編碼:應用程式連接字串加入
characterEncoding=utf8(JDBC)或執行 SET NAMES utf8mb4。
- 避免過度細粒度設定:除非有跨系統整合需求,否則不建議在欄位層級單獨指定編碼,增加維護複雜度。
常見亂碼成因
- 資料庫為
latin1,但應用寫入 UTF-8 資料 → 查詢時出現雙重編碼亂碼。
- 客戶端編碼(如 Windows CMD 預設 GBK)與資料庫不一致,未執行
SET NAMES。
快速檢查命令
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
- 上一篇文章: macOS 下重置 MySQL root 密碼與修復權限完整指南
- 下一篇文章: Ubuntu 徹底移除並重裝 MySQL 步驟指南
Copyright ©
程式碼之家 All Rights Reserved