亂碼根因在於「寫入時的客戶端字元集」與「讀取時的客戶端字元集」不一致。資料庫本身的字元集僅影響儲存格式與排序,不直接導致亂碼。
| 連線方式 | 設定位置 |
|---|---|
| 命令列 | my.ini 中 [client] 區段 |
| EMS 等 GUI 工具 | 工具連線設定優先,其次回退 my.ini |
| JDBC | 連線字串指定:jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8 |
| PHP (mysqli/PDO) | 連線後執行 SET NAMES utf8mb4 |
若客戶端與資料庫字元集一致,可省略轉換提升效能;統一使用 utf8mb4 兼容性最佳,支援完整 Unicode(含 Emoji)。
-- 查看所有字元集變數
SHOW VARIABLES LIKE '%char%';
-- 重點關注:
-- character_set_client 客戶端字元集
-- character_set_database 當前資料庫字元集
-- character_set_server 伺服器預設字元集
-- 查看表字元集
SHOW TABLE STATUS FROM db_name LIKE 'table_name';
-- 查看欄位字元集
SHOW FULL COLUMNS FROM table_name;
-- 查看支援的字元集
SHOW CHARSET;
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_cimysqldump --default-character-set=latin1 匯出 → iconv 轉碼 → SET NAMES utf8mb4 匯入