2011年3月10日 星期四

latin1_swedish_ci 轉 utf8_general_ci

工作時在備份前人的資料,發現它的結構竟然是用 latin1_swedish_ci 的格式,一整個讓人... , 為了日後方便作業,解定將它轉成 utf-8 備份
前置作業
現很多都雲端管理資料庫,所以可能無法使用mysqldump 的指令,除你可用ssh 連入管理OS,但我沒有權限 ORZ..,所以只好找方法進行。
在資料雲使用 phpmyadmin 匯出資料 (匯出的格式為utf8),在本機端 phpmyadmin匯入,匯入時需選文字編碼檔案格式為 latin1,匯入後本機端就可以進行 mysqldump

備份方式1 -- 使用phpmyadmin
1. 到 phpmyadmin 修改 phpMyAdmin/libraries/select_lang.lib.php 檔案

尋找 $mysql_charset_map = array 陣列 , 將
'utf-8' => 'utf8', 變更為 'utf-8' => 'latin1' ,

2. 至 phpmyadmin 匯出檔案 , 匯出檔案會使用 latin1 格式匯出
3. 使用文字編輯器開起後,使用全部取代

CHARSET=latin1 取代為 CHARSET=utf8

4. SQL 存檔格式記得要變更為 utf8

備份方式 2 -- 使用指令mysqldump
1. cmd 指令, 進入到 mysql/bin 底下
2. 備份SQL

平日備份方式
mysqldump -u{帳戶} -p {資料庫} > {備份檔名}.sql

範列:
mysqldump -uroot -p datebase > db.sql
以上是未處理格式的備份方式,所以備份出的格式看latin1會有亂碼,寫出來只是為了看平常如何用mysqldump備份



轉編碼格式備份方式
mysqldump -u{帳戶} -p --default_character-set={原編碼格式} --skip-set-charset {資料庫} > {備份檔名}.sql

範列:
mysqldump -uroot -p --default_character-set=latin1 --skip-set-charset datebase > db.sql
匯出後直接為 utf8 格式


匯入方式,目前未試出最完美的方式,因有一些資料紀錄的編碼會有其它的編碼格式,所以在編輯器會發現它是以亂碼的方式顯示,所以只好在編輯器內刪除無法匯入的紀錄,在進行匯入的動作

1 則留言: