「資料庫編碼、表編碼、連線編碼、檔案編碼」四者必須一致。建庫時指定 CHARSET=utf8mb4(或 utf8),避免預設 latin1 導致後續麻煩。
mysql -u root -p password < import.sql --default-character-set=utf8mb4
適用於命令列直接導入 SQL 檔,強制解析為指定編碼。
mysql -u root -p
USE dbname;
SET NAMES utf8mb4; -- 或 utf8/gbk 視檔案而定
SOURCE /path/to/import.sql;
SET NAMES 等同於同時設定 character_set_client、character_set_connection、character_set_results。
.sql,全選複製。適用於中小檔案(< 50MB),避免命令列編碼參數遺漏。
針對原始導出檔編碼錯誤(如被誤存為 ANSI/GBK)的補救。
| 現象 | 可能原因 | 驗證指令 |
|---|---|---|
| 中文變 ??? | 資料庫/表為 latin1 | SHOW CREATE TABLE t; 檢查 CHARSET |
| 中文變亂碼(如 鏂版澘) | 連線編碼與資料不符 | SHOW VARIABLES LIKE 'character_set%'; |
| Emoji 截斷/報錯 | 使用 utf8(僅 3 字節) | 改用 utf8mb4 重建表 |
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。characterEncoding=utf8mb4。--default-character-set=utf8mb4。CHECK TABLE 檢查編碼一致性。