mysql> source /path/to/backup.sql;
-- 或
mysql -uroot -p < backup.sql
-- 導入後中文顯示亂碼:????、、錯誤字符
**鐵律:** 文件編碼 = 連接字符集 = 目標字符集 (或隱式轉換無損)。
mysql> SET NAMES gbk; -- 若文件是 GBK 編碼
mysql> SOURCE /path/to/backup.sql;
-- 或命令行指定
mysql --default-character-set=gbk -uroot -p < backup.sql
# Linux 檢測
file backup.sql
# 輸出: UTF-8 Unicode text / ISO-8859 text (GBK 常被誤判)
# 確認含中文行
head -n 20 backup.sql | cat -A
# 轉換 (iconv)
iconv -f GBK -t UTF-8 backup.sql > backup_utf8.sql
iconv -f UTF-8 -t GBK backup_utf8.sql > backup_gbk.sql
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
重啟服務生效。新連接自動 `SET NAMES utf8mb4`,UTF-8 文件無需手動指定。
| 坑點 | 後果 | 解決 |
|---|---|---|
| 文件 UTF-8,連接 GBK | 中文變 ???? (無法映射) | 統一為 UTF-8/utf8mb4 |
| 文件 GBK,連接 UTF-8 | 中文變 (無效字節序列) | 轉換文件或連接指定 GBK |
| 目標表 latin1,存 UTF-8 數據 | 雙重編碼亂碼,不可逆 | `ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4` |
| Windows 記事本保存為 ANSI (實為 GBK) | 導入 Linux MySQL (默認 UTF-8) 亂碼 | 另存為 UTF-8 (帶 BOM 或無 BOM 均可) |
| mysqldump 導出未指定字符集 | 默認連接字符集導出,導入環境不同則亂碼 | `mysqldump --default-character-set=utf8mb4` |