MySQL GBK→UTF-8編碼轉(zhuǎn)換
更新時間:2007年05月24日 00:00:00 作者:
前言:
第一次寫教程,其實算不得教程,只是想總結(jié)個轉(zhuǎn)換的手記。如果中間有錯誤,或者辦法不夠理想,大家回貼研究下。
另外,我也希望我們論壇不僅僅作為閑聊的地方,也希望大家能活躍我們論壇的學(xué)習(xí)氣氛,畢竟我們都來自一個應(yīng)該給我們知識的地方,不論你從那里獲得了多少你需要的知識。
好了,言歸正傳。
一準(zhǔn)備:
環(huán)境:MySQL4.1.x及以上版本。
Convertz——文本編碼轉(zhuǎn)換工具,molyx上介紹的,我采用的。其實這類工具很多。
二理論:
MySQL從4.1版本開始內(nèi)部存儲字符集支持了UTF-8,這個我也是這幾天才看到的。因為升級論壇過程中,服務(wù)器數(shù)據(jù)庫環(huán)境為4.0.26當(dāng)時不知道并不支持utf-8字符集,還廢了些周折。這樣如果涉及到UTF-8轉(zhuǎn)儲還要升級MySQL版本到4.1以上。
轉(zhuǎn)換的大概思路是——備份(有備無緩)→修復(fù)數(shù)據(jù)庫→mysqldump導(dǎo)出→Convertz轉(zhuǎn)換編碼→修改轉(zhuǎn)換后文件→mysqldump導(dǎo)入恢復(fù)
三實踐:
1、備份。這個不需要太多說了你可以采用任何一種常規(guī)的備份方式只要你自己恢復(fù)的了。
2、修復(fù)。mysqlcheck -r -u user -p 如果全OK那就OK了,如果不全OK,再來遍。還沒全OK,不知道怎么弄了。
3、導(dǎo)出。由于latin1為默認(rèn)存儲,所以你需要事先確定你數(shù)據(jù)庫的編碼格式。舉例,lncz.net原為gbk編碼,但存儲為latin1,這樣導(dǎo)出時應(yīng)該指定編碼為latin1,導(dǎo)出后才能以ANSI形式正確顯示gbk的文字。
導(dǎo)出命令:mysqldump database_name field > path --default-character-set=latin1 -u user -p
數(shù)據(jù)庫大需要分段,不然接下來的操作會很麻煩。我是單獨把每個表導(dǎo)出來的。當(dāng)時想法比較簡單,因為數(shù)據(jù)庫有壞表,只想在恢復(fù)的時候知道哪個表出錯單獨修復(fù)。
4、轉(zhuǎn)換。Convertz用這個軟件很簡單,不必多說了。
5、修改。我在嘗試直接導(dǎo)入恢復(fù)數(shù)據(jù)庫時,失敗了N次,每次都亂碼。仔細(xì)想過之后才明白,如果你直接導(dǎo)回去,數(shù)據(jù)庫還是用默認(rèn)的latin1去存儲,而你的現(xiàn)在的編碼是utf-8所以它會再進(jìn)行一次轉(zhuǎn)換便出錯了。這里MySQL到底怎么處理的我還不是十分清楚,誰知道麻煩相告。這時我們需要對轉(zhuǎn)換好的文件加入語句 “set names utf8;”注意不是utf-8;并且需要將文件中“CHARSET=latin1;”改為“CHARSET=utf8;”來指定表的存儲編碼。
6、恢復(fù)?;謴?fù)過程按道理應(yīng)該是很簡單的,都是mysqldump處理。需要注意一點就是如果你的數(shù)據(jù)庫大,要做全局變量的修改max_allowed_packet默認(rèn)為1M,看你數(shù)據(jù)庫表的大小,相應(yīng)修改my.ini文件。
導(dǎo)入命令:mysqldump database_name < path -u user -p 導(dǎo)入順利的話你的數(shù)據(jù)庫編碼就已經(jīng)轉(zhuǎn)換為utf-8了。
在下比較菜,如果有錯誤請指正,表笑我。以上僅供參考。
第一次寫教程,其實算不得教程,只是想總結(jié)個轉(zhuǎn)換的手記。如果中間有錯誤,或者辦法不夠理想,大家回貼研究下。
另外,我也希望我們論壇不僅僅作為閑聊的地方,也希望大家能活躍我們論壇的學(xué)習(xí)氣氛,畢竟我們都來自一個應(yīng)該給我們知識的地方,不論你從那里獲得了多少你需要的知識。
好了,言歸正傳。
一準(zhǔn)備:
環(huán)境:MySQL4.1.x及以上版本。
Convertz——文本編碼轉(zhuǎn)換工具,molyx上介紹的,我采用的。其實這類工具很多。
二理論:
MySQL從4.1版本開始內(nèi)部存儲字符集支持了UTF-8,這個我也是這幾天才看到的。因為升級論壇過程中,服務(wù)器數(shù)據(jù)庫環(huán)境為4.0.26當(dāng)時不知道并不支持utf-8字符集,還廢了些周折。這樣如果涉及到UTF-8轉(zhuǎn)儲還要升級MySQL版本到4.1以上。
轉(zhuǎn)換的大概思路是——備份(有備無緩)→修復(fù)數(shù)據(jù)庫→mysqldump導(dǎo)出→Convertz轉(zhuǎn)換編碼→修改轉(zhuǎn)換后文件→mysqldump導(dǎo)入恢復(fù)
三實踐:
1、備份。這個不需要太多說了你可以采用任何一種常規(guī)的備份方式只要你自己恢復(fù)的了。
2、修復(fù)。mysqlcheck -r -u user -p 如果全OK那就OK了,如果不全OK,再來遍。還沒全OK,不知道怎么弄了。
3、導(dǎo)出。由于latin1為默認(rèn)存儲,所以你需要事先確定你數(shù)據(jù)庫的編碼格式。舉例,lncz.net原為gbk編碼,但存儲為latin1,這樣導(dǎo)出時應(yīng)該指定編碼為latin1,導(dǎo)出后才能以ANSI形式正確顯示gbk的文字。
導(dǎo)出命令:mysqldump database_name field > path --default-character-set=latin1 -u user -p
數(shù)據(jù)庫大需要分段,不然接下來的操作會很麻煩。我是單獨把每個表導(dǎo)出來的。當(dāng)時想法比較簡單,因為數(shù)據(jù)庫有壞表,只想在恢復(fù)的時候知道哪個表出錯單獨修復(fù)。
4、轉(zhuǎn)換。Convertz用這個軟件很簡單,不必多說了。
5、修改。我在嘗試直接導(dǎo)入恢復(fù)數(shù)據(jù)庫時,失敗了N次,每次都亂碼。仔細(xì)想過之后才明白,如果你直接導(dǎo)回去,數(shù)據(jù)庫還是用默認(rèn)的latin1去存儲,而你的現(xiàn)在的編碼是utf-8所以它會再進(jìn)行一次轉(zhuǎn)換便出錯了。這里MySQL到底怎么處理的我還不是十分清楚,誰知道麻煩相告。這時我們需要對轉(zhuǎn)換好的文件加入語句 “set names utf8;”注意不是utf-8;并且需要將文件中“CHARSET=latin1;”改為“CHARSET=utf8;”來指定表的存儲編碼。
6、恢復(fù)?;謴?fù)過程按道理應(yīng)該是很簡單的,都是mysqldump處理。需要注意一點就是如果你的數(shù)據(jù)庫大,要做全局變量的修改max_allowed_packet默認(rèn)為1M,看你數(shù)據(jù)庫表的大小,相應(yīng)修改my.ini文件。
導(dǎo)入命令:mysqldump database_name < path -u user -p 導(dǎo)入順利的話你的數(shù)據(jù)庫編碼就已經(jīng)轉(zhuǎn)換為utf-8了。
在下比較菜,如果有錯誤請指正,表笑我。以上僅供參考。
相關(guān)文章
php安裝dblib擴(kuò)展,連接mssql的具體步驟
下面小編就為大家?guī)硪黄猵hp安裝dblib擴(kuò)展,連接mssql的具體步驟。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03深入解析PHP垃圾回收機(jī)制對內(nèi)存泄露的處理
本篇文章是關(guān)于PHP垃圾回收機(jī)制對內(nèi)存泄露的處理進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06dede3.1分頁文字采集過濾規(guī)則詳說(圖文教程)
dede3.1分頁文字采集過濾規(guī)則詳說(圖文教程)...2007-04-04JS與PHP向函數(shù)傳遞可變參數(shù)的區(qū)別實例代碼
JS與PHP向函數(shù)傳遞可變參數(shù)的區(qū)別實例代碼,需要的朋友可以參考下。2011-05-05基于PHP實現(xiàn)用戶登錄注冊功能的詳細(xì)教程
這篇文章主要介紹了基于PHP實現(xiàn)用戶登錄注冊功能的詳細(xì)教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08