首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 3.23 升級 5.1 亂碼問題完整解決實錄

     編輯:MySQL 綜合教學

背景與挑戰

專案需將論壇從 MySQL 3.23 (gb2312) 遷移至 MySQL 5.1 (utf-8)。直接匯入導致嚴重亂碼,經多方查證與實測,總結出一套可落地的「雙重轉碼」流程,特此記錄。

環境資訊

  • 舊庫:MySQL 3.23,資料庫 www.cxinbao.com,字元集 gb2312
  • 新庫:MySQL 5.1.33 (Windows),預設 utf-8
  • 作業系統:Windows XP SP2

核心原理

MySQL 4.1 以前版本不支援字元集標記,資料實際以 latin1(二進位)儲存。升級跨大版本時,需經過「latin1 中轉」才能正確轉碼至 utf-8。

操作步驟

階段一:在本機重建 3.23 環境並匯出

  1. 安裝 MySQL 3.23,將伺服器 data 目錄整份複製到本機對應位置。
  2. 進入 bin 目錄,以 gbk 匯出 SQL:
mysqldump -uroot -p --default-character-set=gbk www.cxinbao.com > cxinbao.sql

階段二:建立 latin1 中轉庫並匯入

  1. 刪除原庫資料表(保留資料庫)。
  2. 以 latin1 匯入剛匯出的 SQL:
mysql -uroot -p --default-character-set=latin1 -f www.cxinbao.com < cxinbao.sql

-f 強制繼續執行(忽略部分警告)。

階段三:從 latin1 庫再次匯出

mysqldump -uroot -p --default-character-set=latin1 www.cxinbao.com > cxinbao.sql

此時 SQL 檔內資料實為 latin1 編碼的位元組序列。

階段四:安裝 MySQL 5.1 並建立 utf-8 目標庫

  1. 停止 3.23 服務,安裝 MySQL 5.1(安裝時選擇 utf-8)。
  2. 建立新資料庫 cxinbaonew(字元集 utf-8)。
  3. 將 cxinbao.sql 複製至 5.1 bin 目錄。

階段五:以 gbk 匯入 utf-8 庫(關鍵轉碼步驟)

mysql -uroot -p --default-character-set=gbk -f cxinbaonew < cxinbao.sql

MySQL 會將輸入視為 gbk,轉存為 utf-8,完成正確轉碼。

驗證與後續

  • 進入 cxinbaonew 檢視資料,中文應正常顯示。
  • 調整應用程式連線字串指向新庫,測試功能無誤後上線。
  • 建議同步修正資料表/欄位字元集為 utf8mb4,支援完整 Unicode(含 Emoji)。

避坑指南

  • 跨 4.1 版本遷移不可直接複製 data 目錄,必須走 mysqldump 邏輯備份路徑。
  • 三次字元集參數(gbk → latin1 → gbk)是核心口訣,切勿記錯。
  • 大資料量時建議加 --quick 或 --opt 避免記憶體暴增。
  • 生產環境務必先在測試環境完整演練,驗證資料完整性。

結語

MySQL 大版本跨字元集升級的本質是「編碼轉換鏈路重建」。掌握 latin1 中轉法,配合正確的 --default-character-set 參數序列,即可徹底解決歷史亂碼難題。

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