本篇文章更新時間:2020/04/24
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
預設把資料庫導出的時候都是資料表結構與資料混在一起。如果希望分別匯出的話可以使用下方指令:(環境需安裝 MySQL Client 套件)
輸出 SQL 結構
mysqldump -uDBUSER -pDBPASSWD DBNAME --no-data > schema.sql
輸出資料庫資料
mysqldump -uDBUSER -pDBPASSWD DBNAME --no-create-db --no-create-info --skip-comments --compact > data.sql
重新匯入的方法
在上述兩個操作的資料夾中登入 MySQL
mysql -uDBUSER -pDBPASSWD DBNAME
然後先匯入資料表結構,
source schema.sql;
再匯入資料。
source data.sql;
後記
其實預設全部一起匯出對於一般情況已可滿足,會這樣拆解主要是為了處理編碼轉換的問題上。(續上篇 [PHP] 舊專案、新環境的「向上相容」技術 提到的專案)
轉出結構的部分包含對資料編碼的宣告。資料儲存採該編碼,但匯出的檔案預設為 UTF8 ,所以還須補上 --skip-set-charset --default-character-set=latin1
這個參數來正確轉換(這裡舉例 latin1
),然後是替換結構中的宣告為新的編碼 sed 's/CHARSET=latin1/CHARSET=utf8mb4/g'
。
至於資料的部分也同樣以此參數匯出,然後使用指令 iconv
來轉換過編碼再匯入新的編碼資料庫環境。
iconv -f CP950 data.sql > data.utf8.sql
麻煩的地方是 BIG5 編碼的資料存入 latin1 編碼格式,無從得知原中文編碼為何又要從 latin1 轉 UTF8 的時候,可以試試 BIG5, CP950 或是 BIG5-2003。
如果碰到 cannot convert
就寫程式開檔案,把 data.sql 開起來一行一行的轉碼為 UTF8 格式轉存。
幸運的你,如果上面都沒出錯,就會得到轉換成 UTF8 編碼的資料囉!
當然,如果像我這樣還會繼續有錯誤的,也難免(就認命吧)。不要採用資料轉匯出的方式,直接寫程式與資料庫對接取資料轉換就可以幾乎保證不會有問題了。