將 MySQL 5.0 數據遷移至 3.23 版本,需解決語法不兼容(如 ENGINE= vs TYPE=)與字符集協商失敗兩大問題。本文記錄實測可用的導出導入參數組合。
# 僅指定兼容模式
mysqldump -uroot --skip-comments --compatible=mysql323 --databases db1 db2 db3 > mydump.sql
# 導入 3.23 報錯:字符集協商失敗、ENGINE= 語法錯誤
MySQL 5.0 默認 latin1,3.23 默認 latin1,但若數據實為 gbk/utf8,雙端必須**顯式聲明同一字符集**,否則連接層會按默認協商導致亂碼或報錯。
mysqldump -uroot \
--default-character-set=gbk \ # 或 utf8,與實際數據編碼一致
--skip-comments \
--compatible=mysql323 \
--databases db1 > db1.sql
mysql -uroot --default-character-set=gbk # 必須與導出端一致
mysql> SOURCE /path/db1.sql;
ENGINE=InnoDB → TYPE=MyISAM(3.23 無 InnoDB,無 TYPE=InnoDB)AUTO_INCREMENT 語法保留(3.23 支持)CHARSET=、COLLATE= 等 4.1+ 專有子句/*!40100 ... */ 版本條件註釋包裹,3.23 忽略執行SHOW CREATE TABLE、SELECT HEX(col))--default-character-setInnoDB、utf8mb4、VARCHAR > 255、DATETIME 微秒 等特性,評估業務影響跨大版本遷移核心在於「語法兼容模式 + 雙端字符集顯式綁定」。--compatible=mysql323 處理語法,--default-character-set 處理編碼,雙管齊下方可平滑落地。