萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 匯入匯出中文亂碼徹底解決:字元集統一、mysqldump 參數與實戰案例

MySQL 匯入匯出出現中文亂碼,核心原因只有一個:**匯出端、匯入端、資料庫、表、欄位、連線——六端字元集不一致**。本文提供系統性的統一字元集檢查清單、mysqldump/mysql 關鍵參數、跨平台(Windows→Linux/FreeBSD)實戰步驟,以及 my.cnf 永久配置建議。

核心原則:全鏈路字元集一致

匯出客戶端字元集 = 匯出資料庫/表/欄位字元集 = 匯入客戶端字元集 = 匯入資料庫/表/欄位字元集

最常見組合:全鏈路 UTF-8 (utf8mb4) 或 全鏈路 GBK。

Linux 系統:mysqldump/mysql 統一指定字元集

匯出

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,強制客戶端/連線/結果集字元集一致。

跨平台實戰:Windows (GBK) → FreeBSD/Linux (UTF-8)

步驟 1:檢查來源端字元集變數

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                       |
+--------------------------+----------------------------+

步驟 2:來源端臨時設定資料庫字元集為 UTF-8

mysql> SET character_set_database = utf8;
-- 或在 my.ini [mysqld] 設定 character-set-server=utf8 後重啟

步驟 3:匯出資料 (可用 SELECT ... INTO OUTFILE)

mysql> SELECT * FROM table WHERE condition INTO OUTFILE 'c:/table.txt';

步驟 4:目標端同步設定字元集並匯入

mysql> SET character_set_database = utf8;
mysql> LOAD DATA LOCAL INFILE '/home/table.txt' INTO TABLE `table`;

通用修復三步曲(適用大多數亂碼場景)

  1. 查看當前字元集: SHOW VARIABLES LIKE 'char%';
  2. 修改 my.cnf/my.ini 統一設定:
    [mysql]
    default-character-set=utf8mb4
    
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    
  3. 重啟服務,重新匯入匯出(含 --default-character-set=utf8mb4 參數)。

phpMyAdmin 匯入匯出實操技巧

  • 匯出: 選擇「自訂」→ 字元集選 utf8mb4(或目標編碼)。
  • 匯入: 「檔案字元集」下拉選單選擇與 SQL 檔案實際編碼一致的選項(如 utf8、gbk、latin1)。
  • 避坑: 匯出時語言選「中文 (Chinese simplified)」,不要選「Chinese simplified-gb2312」,否則中文會變亂碼。

進階:處理已有亂碼資料

-- 1. 確認欄位實際儲存編碼(常見:latin1 存 utf8 內容)
-- 2. 先轉為二進位再轉目標編碼
UPDATE tbl SET col = CONVERT(CAST(CONVERT(col USING latin1) AS BINARY) USING utf8mb4);
-- 3. 或匯出 → 圖形工具 (Notepad++/Sublime) 轉碼 → 匯入

總結:亂碼不神秘,只要「統一」二字

  • 生產環境**統一使用 utf8mb4**(支援 Emoji、完整 Unicode)。
  • 應用程式連線字串加 charset=utf8mb4(PHP PDO、JDBC、Python 等)。
  • 匯入匯出**務必顯式指定 --default-character-set**。
  • 資料庫/表/欄位建立時**顯式指定 CHARSET=utf8mb4**。

建立「字元集一致性」基線,從架構、開發、運維三端落實,中文亂碼將成為歷史。

copyright © 萬盛學電腦網 all rights reserved