影響編程的關鍵只有兩個字符集:**客戶端字符集** 與 **資料庫字符集** (伺服器字符集較少直接影響)。
**寫入時的客戶端字符集 = 讀取時的客戶端字符集** → 無亂碼。
MySQL 會在寫入時將客戶端編碼轉為資料庫編碼存儲,讀取時再轉回客戶端編碼。若兩次客戶端編碼一致,中間轉換雖發生但結果正確;若資料庫編碼也一致,更可省去轉換效能損耗,並利於未來遷移。
| 客戶端類型 | 設定方法 |
|---|---|
| 控制台 | my.ini 中 [client] 區段設定 |
| EMS 等 GUI 工具 | 連線配置優先,否則回退 my.ini |
| JDBC | 連接串指定:?useUnicode=true&characterEncoding=gbk |
| PHP | mysqli_set_charset($link, 'utf8') 或 SET NAMES utf8 |
SHOW VARIABLES LIKE '%char%'; — 檢視 character_set_client、_database、_serverSHOW TABLE STATUS FROM db LIKE 'table%'; — 資料表字符集SHOW FULL COLUMNS FROM table; — 欄位字符集SHOW CHAR SET; — 系統支援字符集列表UTF-8 (或 utf8mb4 支援 Emoji)。UTF-8。SET NAMES utf8 (或對應編碼)。