MySQL 匯入匯出出現中文亂碼,核心原因只有一個:**匯出端、匯入端、資料庫、表、欄位、連線——六端字元集不一致**。本文提供系統性的統一字元集檢查清單、mysqldump/mysql 關鍵參數、跨平台(Windows→Linux/FreeBSD)實戰步驟,以及 my.cnf 永久配置建議。
匯出客戶端字元集 = 匯出資料庫/表/欄位字元集 = 匯入客戶端字元集 = 匯入資料庫/表/欄位字元集
最常見組合:全鏈路 UTF-8 (utf8mb4) 或 全鏈路 GBK。
mysqldump -uroot -p --default-character-set=utf8mb4 dbname tablename > backup.sql
mysql -uroot -p --default-character-set=utf8mb4 dbname < backup.sql
關鍵: 兩端都加 --default-character-set=utf8mb4,強制客戶端/連線/結果集字元集一致。
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 ← 關鍵:資料庫預設 latin1 無法儲存多位元組中文
| character_set_server | gbk |
| character_set_system | utf8 |
+--------------------------+----------------------------+
mysql> SET character_set_database = utf8;
-- 或在 my.ini [mysqld] 設定 character-set-server=utf8 後重啟
mysql> SELECT * FROM table WHERE condition INTO OUTFILE 'c:/table.txt';
mysql> SET character_set_database = utf8;
mysql> LOAD DATA LOCAL INFILE '/home/table.txt' INTO TABLE `table`;
SHOW VARIABLES LIKE 'char%';[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
--default-character-set=utf8mb4 參數)。utf8mb4(或目標編碼)。utf8、gbk、latin1)。-- 1. 確認欄位實際儲存編碼(常見:latin1 存 utf8 內容)
-- 2. 先轉為二進位再轉目標編碼
UPDATE tbl SET col = CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8mb4);
-- 3. 或匯出 → 圖形工具 (Notepad++/Sublime) 轉碼 → 匯入
charset=utf8mb4(PHP PDO、JDBC、Python 等)。--default-character-set**。建立「字元集一致性」基線,從架構、開發、運維三端落實,中文亂碼將成為歷史。