首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 匯入匯出中文亂碼完整解決:字符集統一、mysqldump 參數、跨平台遷移實戰

     編輯:MySQL 資料庫相關知識

亂碼本質:匯出端與匯入端字符集不一致。Linux 預設 UTF-8,Windows 預設 GBK,跨平台遷移必須顯式指定字符集。

核心原則:匯出與匯入使用相同字符集

# 匯出
mysqldump -u root -p --default-character-set=utf8mb4 db_name > dump.sql

# 匯入
mysql -u root -p --default-character-set=utf8mb4 db_name < dump.sql

場景一:Windows (GBK) → Linux/FreeBSD (UTF-8) 文字檔遷移

  1. Windows 端設定會話字符集:
mysql> SET NAMES utf8mb4;  -- 或 SET character_set_database=utf8mb4;
  1. 匯出文字檔:
mysql> SELECT * FROM tbl INTO OUTFILE 'C:/tbl.txt' CHARACTER SET utf8mb4
     FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
  1. Linux 端同樣設定 SET NAMES utf8mb4; 後導入:
mysql> LOAD DATA LOCAL INFILE '/home/tbl.txt' INTO TABLE tbl
     CHARACTER SET utf8mb4
     FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

場景二:修正 my.cnf/my.ini 永久生效

[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'

重啟服務後,所有新連線預設即為 UTF-8。

場景三:資料已寫入錯誤字符集 (雙重編碼) 修復

-- 1. 建立暫存表,欄位設為 latin1 (透明載體)
CREATE TABLE tmp_tbl (col VARCHAR(255) CHARACTER SET latin1) ENGINE=InnoDB;

-- 2. 以 latin1 讀出原資料 (不轉碼)
INSERT INTO tmp_tbl SELECT col FROM orig_tbl;

-- 3. 修改欄位字符集為正確編碼 (MySQL 自動 latin1→utf8mb4 轉換)
ALTER TABLE tmp_tbl MODIFY col VARCHAR(255) CHARACTER SET utf8mb4;

-- 4. 覆蓋回原表
UPDATE orig_tbl o JOIN tmp_tbl t ON o.id=t.id SET o.col=t.col;

快速驗證指令

SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';

確認 character_set_client、connection、database、results、server 皆為 utf8mb4。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved