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

MySQL 字符集完美轉換實戰:GBK/Latin1/UTF-8 互轉與版本遷移避坑指南

     編輯:MySQL 資料庫相關知識

背景

MySQL 4.1+ 引入字符集概念,4.0 及之前默認 Latin1。版本升降級、跨字符集遷移、安裝 SupeSite 等場景常需轉換。**最穩妥方法:利用 mysqldump 導出時指定源字符集、導入時指定目標字符集,中間經 Latin1 中轉。**

場景一:GBK/UTF-8 → Latin1(MySQL 4.1+ → 4.0)

1. 導出(源庫 4.1+)


mysqldump -uroot -p --default-character-set=gbk --set-charset=latin1 --compatible=mysql40 --skip-opt discuz > discuz.sql

參數解析:

  • --default-character-set=gbk:按 GBK 讀取數據
  • --set-charset=latin1:輸出文件標記為 Latin1
  • --compatible=mysql40:生成 4.0 兼容語法
  • --skip-opt:禁用優化選項,避免兼容性問題
Windows導出 Linux導出

2. 導入(目標庫 4.0)


mysql -uroot -p --default-character-set=latin1 -f discuz < discuz.sql
Windows導入 Linux導入

場景二:Latin1 → GBK/UTF-8(MySQL 4.0 → 4.1+)

需三步:導出(Latin1) → 導入(4.1+ Latin1) → 再導出(Latin1→GBK) → 導入(GBK)


# 1. 4.0 導出
mysqldump -uroot -p --default-character-set=latin1 --set-charset=latin1 --skip-opt discuz > discuz.sql

# 2. 導入 4.1+(按 Latin1 讀取)
mysql -uroot -p --default-character-set=latin1 -f discuz < discuz.sql

# 3. 4.1+ 轉碼導出
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt discuz > discuz.sql

# 4. 導入新庫(按 GBK 讀取)
mysql -uroot -p --default-character-set=gbk -f newdiscuz < discuz.sql

常見報錯處理:unknown command '/'

原因: mysqldump 導出時,某些繁體字後自動加反斜杠 \。
解決: 用文本編輯器(UltraEdit/Notepad++)打開 .sql,批量移除反斜杠,或修正含特殊字符的用戶名。

最佳實踐總結

  1. **全程命令行操作**,避免 GUI 工具隱式轉碼
  2. **源庫導出時指定 --default-character-set=源編碼**
  3. **目標庫導入時指定 --default-character-set=目標編碼**
  4. 跨大版本(4.0↔4.1+)必經 **Latin1 中轉**
  5. 導出加 --skip-opt --compatible=mysql40 最大化兼容
  6. 導入加 -f 強制繼續,忽略非致命錯誤
  7. 轉換後驗證:SHOW VARIABLES LIKE 'char%';、抽樣查詢中文數據

結語

字符集轉換核心是**「導出時按源編碼讀,導入時按目標編碼寫」**,Latin1 作為無損中轉橋樑。嚴格遵循上述命令參數,配合文本編輯器清洗反斜杠,可實現 GBK/Latin1/UTF-8 任意互轉,完美解決遷移亂碼。

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