將本地 GBK 編碼 MySQL 資料庫遷移至僅提供 phpMyAdmin 的虛擬主機,歷經 Navicat 導出亂碼、mysqldump 參數調試、鎖表權限不足、phpMyAdmin 導入編碼錯誤等多重坑點,最終完整落地。記錄全流程供參考。
單表導出正常,但 82 張表逐個操作不現實。
mysqldump -uroot -p123 dbname > dump.sql
mysqldump -uroot -p123 --default-character-set=gbk dbname > dump_gbk.sql
打開檔案確認中文正常顯示(ANSI/GBK 編碼)。
phpMyAdmin 導入報錯:LOCK TABLES ... Access denied,虛擬主機無 LOCK TABLES 權限。
該參數僅影響備份時一致性,不控制輸出是否包含 LOCK 陳述句。
mysqldump -uroot -p123 --default-character-set=gbk --add-locks=false dbname > dump_nolock.sql
輸出檔不再包含 LOCK TABLES/UNLOCK TABLES。
gbk_chinese_cigbk(預設 utf-8 會導致亂碼)
圖 1:Navicat 對整個資料庫轉 SQL
| 環節 | 錯誤做法 | 正確做法 |
|---|---|---|
| 導出工具 | Navicat 整庫導出 | mysqldump + --default-character-set=gbk |
| 鎖表處理 | --skip-lock-tables | --add-locks=false |
| phpMyAdmin 編碼 | 保持預設 utf-8 | 連線校對 gbk_chinese_ci + 匯入字符集 gbk |
| 檔案編碼確認 | 不檢查直接導入 | 記事本打開確認中文可讀(ANSI/GBK) |
編碼遷移核心原則:導出端指定源編碼、導入端指定目標編碼、中間檔案編碼一致。虛擬主機受限環境下,mysqldump + phpMyAdmin 仍可平穩完成 GBK→GBK 遷移。