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

MySQL 匯入匯出中文亂碼終極解決:字元集統一鐵律與三大實戰場景

     編輯:MySQL 資料庫相關知識

亂碼本質是匯出端與匯入端字元集不一致。核心鐵律:**全鏈路(資料庫、表、連線、檔案、客戶端)統一同一字元集**。

場景一:Linux 伺服器間遷移(UTF-8 環境)

# 匯出
mysqldump -uroot -p --default-character-set=utf8 db table > bak.sql

# 匯入
mysql -uroot -p --default-character-set=utf8 db < bak.sql

場景二:Windows (GBK) → FreeBSD/Linux (UTF-8) 跨平台遷移

步驟 1:Windows 端設定會話字元集為 UTF-8

mysql> SET character_set_database = utf8;
mysql> SELECT * FROM table INTO OUTFILE 'C:/table.txt' WHERE ...;

步驟 2:Linux 端同步設定並匯入


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

場景三:通用修正法(修改 my.cnf/my.ini)


[mysql]
default-character-set = gbk   # 或 utf8,視環境而定

[mysqld]
character-set-server = utf8

重啟服務後重新匯入,若仍亂碼,檢查 SHOW VARIABLES LIKE 'char%' 確認雙端一致。

關鍵檢查指令


SHOW VARIABLES LIKE 'char%';
-- 重點對齊:character_set_client、connection、database、results、server

避坑清單

  • mysqldump 必須加 --default-character-set,否則用預設值(常為 latin1)
  • Windows cmd 預設代碼頁 936 (GBK),PowerShell 預設 UTF-8,導出導入工具編碼必須匹配
  • LOAD DATA 若無 LOCAL 關鍵字,檔案需置於 Server 端且受 secure_file_priv 限制
  • 資料庫/表層級字元集(CHARSET=)僅影響新建欄位,既有資料需 ALTER TABLE ... CONVERT TO CHARACTER SET

一句話總結

匯出編碼 = 匯入編碼 = 資料庫儲存編碼 = 連線編碼 = 檔案編碼,五者合一,亂碼自消。

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