Mysql Latin1 轉成 UTF-8 的方
2.匯出舊資料,把資料庫 dump 出來文字檔
mysqldump -u 使用者名稱 -p 資料庫名稱 > database.sql --default-character-set=latin1
例如 mysqldump -u DBusername -p dorm > /tmp/dorm.sql --default-character-set=latin1 (這行指令的意思是說,我要dump出來dorm的資料庫,把內容存成/tmp下面的dorm.sql 文字檔 )
如果想單純只dump一個TABLE,mysqldump -u xxx -p 資料庫 資料表 > database.sql --default-character-set=latin1
3.利用Winscp將剛剛轉出來的文字檔傳回自己的電腦,如果你習慣在Linux Server 上作業也無訪,我個人是比較習慣在Windows上處理。
使用 emEditor 編輯器,把剛剛產生的文字檔打開,用取代的方式將把CHARSET=latin1 COLLATE=latin1_general_ci,都取代成 CHARSET=utf8 COLLATE=utf8_unicode_ci (若無此行可省略這個動作)
有時候由Big5匯出時,phpMyAdmin 會自動把許功蓋等字加上\,記得用取代的方式把\去掉。
(附註說明:如果在文字檔中的建立表格的語法結構中,若有TYPE=MyISAM的,用取代的方式 移除掉)
使用 emEditor 編輯器,把剛剛產生的文字檔打開,用取代的方式將把CHARSET=latin1 COLLATE=latin1_general_ci,都取代成 CHARSET=utf8 COLLATE=utf8_unicode_ci (若無此行可省略這個動作)
有時候由Big5匯出時,phpMyAdmin 會自動把許功蓋等字加上\,記得用取代的方式把\去掉。
(附註說明:如果在文字檔中的建立表格的語法結構中,若有TYPE=MyISAM的,用取代的方式 移除掉)
4.在文字檔的檔案開頭加入以下3行,
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
(如果檔案太大Windows打不開,可以考慮用Linux中的vi指令,使用取代的方法)
4.把剛剛完成的檔案傳到要匯入資料的伺服器上,我是習慣傳到/tmp下面,以後比較好清理。
用指令 mysql -u 使用者帳號 -p 進入mysql,若要匯入的資料庫為parking,則使用use parking 來切換進入parking資料庫中,
最後用匯資料的方式匯入該檔案,
指令為 source 檔案位置 (例如檔案名稱為dorm.sql,放在/tmp下,
所以使用指令 source /tmp/dorm.sql;)
附註說明:
1.匯入文字檔到mysql時若出現,Got a packet bigger than 'max_allowed_packet'
bytes的錯誤訊息,則是因為mysql允許的單次最大輸入容量有上限(預設為1M),可在/etc/mysql.cnf中,加入max_allowed_packet=128Mà看狀況調整,記得mysql要重啟
2. 轉檔過程中如果出現文字破壞了結構,如以下
INSERT INTO leaveformlist VALUES (51282,'','AXXXXXXXX','A3200','B9','有事待辦','楊珮華','2012-02-XX','08:00:00','2012-02-XX','17:00:00',8,'X秘?,NULL,NULL,'','2012-02-13
09:08:37',NULL,NULL,'0000-00-00 00:00:00','','','','','','','2012','N','Y');
查看原始資料庫中看到的是
可以看到makeby這個欄位的資料內容錯誤,正確應為'X珮X',但是因為珮這個字造成了資料庫原本文字亂碼,進而造成系統匯入錯誤,此為人工手動處理,建議每個TABLE匯入看看,若出現問題直接文字檔修改
3.轉檔過程中最難處理的就是欄位內容中有逗點符號,這樣轉出來的資料格式就被破壞了,如果你的原始資料中有逗點符號的,請也先行處理
(小技巧:
幾次轉碼下來,發現如果出現亂碼的,通常都是像楊X?,的格式,可以透過編輯器裡面取代的方式把整個文件裡的?,取代為?', 這樣可以縮短人工一行一行找的時間
)
沒有留言:
張貼留言