這幾天抽空配合網路中心的伺服器更新措施,搬遷了台中縣國教輔導團的gallery平台
其中在資料庫的轉移部分遇到了些小小的問題,作一下筆記
其實在很多平台、服務進行轉移的時候也都會有類似的問題
通常比較早以前建置的服務,因為套裝程式沒有考慮到或者因為資料庫伺服器版本太舊等等因素
經常會出現MySQL資料庫編碼預設為 latin1 ( latin1_swedish_ci ) 但是其實 php 寫入的資料卻是 UTF8
通常,這種怪現象在剛安裝的平台上並不會產生什麼錯誤,不過,當要轉移的時候肯定要與亂碼搏鬥一番
- mysqldump -u user -p 資料庫 > example.sql --default-character-set=latin1
- 用vim的字串取代功能把sql中的charset=latin1 取代為 utf8
- mysql 資料庫 < example.sql -u user -p --default-character-set=utf8
第一個步驟將資料用正確的編碼讀取出來,接著修改重新匯入create table的default charset
雖然我是用vim的來作取代,其實用notepad++之類,有支援UTF8的編輯器其實都可以
只是因為資料庫dump出來之後往往動輒數十到數百MB,如果在pc上面跑編輯器,很有可能會掛點 XD
使用vim字串取代的方式
:n1,n2s/word1/word2/g
- 在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2 !
:1,$s/word1/word2/g
- 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !
:1,$s/word1/word2/gc
- 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認(conform)是否需要取代!
vim指令可以參考「鳥哥的私房菜」
如果在很理想的狀況下,這樣應該就解決了,不過,通常老天爺沒有這麼感心 @@
有時候還是有可能會出現亂碼,或者匯入的時候失敗,等等奇奇怪怪的結果
可以針對匯入的時候那個錯誤訊息,去看看是哪個資料表出了問題,手動在做彌補
如果要匯出單一個資料表,且想用phpMyAdmin看到那個怪怪的latin1格式的utf8資料顯示正確文字
可以先找到 phpMyAdmin中的libraries目錄,編輯其下的 select_lang.lib.php
找到
$GLOBALS['mysql_charset_map'] = array(
... 略
'utf-8' => 'utf8'
... 略
);
將其中的 'utf-8' => 'utf8' 暫時改為 'utf-8' => 'latin1'
這樣一來,就可以在phpMyAdmin中正常顯示中文字,趕快使用輸出的功能將資料表匯出為sql
再到新的server去做匯入就可以了。
留言
張貼留言
留個話吧 ^O^