MySQL GBK→UTF-8編碼轉換

來源:互聯網
上載者:User

前言:
第一次寫教程,其實算不得教程,只是想總結個轉換的手記。如果中間有錯誤,或者辦法不夠理想,大家回貼研究下。
另外,我也希望我們論壇不僅僅作為閑聊的地方,也希望大家能活躍我們論壇的學習氣氛,畢竟我們都來自一個應該給我們知識的地方,不論你從那裡獲得了多少你需要的知識。

好了,言歸正傳。

一準備:
環境:MySQL4.1.x及以上版本。
Convertz——文本編碼轉換工具,molyx上介紹的,我採用的。其實這類工具很多。

二理論:
MySQL從4.1版本開始內部儲存字元集支援了UTF-8,這個我也是這幾天才看到的。因為升級論壇過程中,伺服器資料庫環境為4.0.26當時不知道並不支援utf-8字元集,還廢了些周折。這樣如果涉及到UTF-8轉儲還要升級MySQL版本到4.1以上。
轉換的大概思路是——備份(有備無緩)→修複資料庫→mysqldump匯出→Convertz轉換編碼→修改轉換後檔案→mysqldump匯入恢複

三實踐:
1、備份。這個不需要太多說了你可以採用任何一種常規的備份方式只要你自己恢複的了。
2、修複。mysqlcheck -r -u user -p 如果全OK那就OK了,如果不全OK,再來遍。還沒全OK,不知道怎麼弄了。
3、匯出。由於latin1為預設儲存,所以你需要事先確定你資料庫的編碼格式。舉例,lncz.net原為gbk編碼,但儲存為latin1,這樣匯出時應該指定編碼為latin1,匯出後才能以ANSI形式正確顯示gbk的文字。
匯出命令:mysqldump database_name field > path --default-character-set=latin1 -u user -p
資料庫大需要分段,不然接下來的操作會很麻煩。我是單獨把每個表匯出來的。當時想法比較簡單,因為資料庫有壞表,只想在恢複的時候知道哪個表出錯單獨修複。
4、轉換。Convertz用這個軟體很簡單,不必多說了。
5、修改。我在嘗試直接匯入恢複資料庫時,失敗了N次,每次都亂碼。仔細想過之後才明白,如果你直接導回去,資料庫還是用預設的latin1去儲存,而你的現在的編碼是utf-8所以它會再進行一次轉換便出錯了。這裡MySQL到底怎麼處理的我還不是十分清楚,誰知道麻煩相告。這時我們需要對轉換好的檔案加入語句 “set names utf8;”注意不是utf-8;並且需要將檔案中“CHARSET=latin1;”改為“CHARSET=utf8;”來指定表的儲存編碼。
6、恢複。恢複過程按道理應該是很簡單的,都是mysqldump處理。需要注意一點就是如果你的資料庫大,要做全域變數的修改max_allowed_packet預設為1M,看你資料庫表的大小,相應修改my.ini檔案。
匯入命令:mysqldump database_name < path -u user -p 匯入順利的話你的資料庫編碼就已經轉換為utf-8了。

在下比較菜,如果有錯誤請指正,表笑我。以上僅供參考。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.