專案需將論壇從 MySQL 3.23 (gb2312) 遷移至 MySQL 5.1 (utf-8)。直接匯入導致嚴重亂碼,經多方查證與實測,總結出一套可落地的「雙重轉碼」流程,特此記錄。
www.cxinbao.com,字元集 gb2312MySQL 4.1 以前版本不支援字元集標記,資料實際以 latin1(二進位)儲存。升級跨大版本時,需經過「latin1 中轉」才能正確轉碼至 utf-8。
data 目錄整份複製到本機對應位置。bin 目錄,以 gbk 匯出 SQL:mysqldump -uroot -p --default-character-set=gbk www.cxinbao.com > cxinbao.sql
mysql -uroot -p --default-character-set=latin1 -f www.cxinbao.com < cxinbao.sql
-f 強制繼續執行(忽略部分警告)。
mysqldump -uroot -p --default-character-set=latin1 www.cxinbao.com > cxinbao.sql
此時 SQL 檔內資料實為 latin1 編碼的位元組序列。
cxinbaonew(字元集 utf-8)。cxinbao.sql 複製至 5.1 bin 目錄。mysql -uroot -p --default-character-set=gbk -f cxinbaonew < cxinbao.sql
MySQL 會將輸入視為 gbk,轉存為 utf-8,完成正確轉碼。
cxinbaonew 檢視資料,中文應正常顯示。utf8mb4,支援完整 Unicode(含 Emoji)。mysqldump 邏輯備份路徑。gbk → latin1 → gbk)是核心口訣,切勿記錯。--quick 或 --opt 避免記憶體暴增。MySQL 大版本跨字元集升級的本質是「編碼轉換鏈路重建」。掌握 latin1 中轉法,配合正確的 --default-character-set 參數序列,即可徹底解決歷史亂碼難題。