隨筆 - 55  文章 - 187  trackbacks - 0
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(12)

          隨筆分類

          隨筆檔案

          groovy

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          按照下面做法,終于成功了!慶祝,紀(jì)念......

          背景:某個系統(tǒng)的mysql數(shù)據(jù)庫dnname采用默認(rèn)的latin1字符集,系統(tǒng)升級需要將所有數(shù)據(jù)轉(zhuǎn)換成utf-8格式,目標(biāo)數(shù)據(jù)庫為newdbname(建庫時使用utf8)

          方法一:

          步驟一 命令行執(zhí)行:mysqldump --opt -hlocalhost -uroot -p*** --default-character-set=lantin1 dbname > /usr/local/dbname.sql

          步驟二 將 dbname.sql文件中的create table語句的CHARSET=latin1改為CHARSET=utf8

          步驟三 在dbname.sql文件中的insert語句之前加一條'set names utf8;'

          步驟四 將dbname.sql轉(zhuǎn)碼為utf-8格式,建議使用UltraEditor,可以直接使用該編輯器的'轉(zhuǎn)換->ASCII到UTF-8(Unicode編輯)',或者將文件另存為UTF-8(無BOM)格式

          步驟五 命令行執(zhí)行:mysql -hlocalhost -uroot -p*** --default-character-set=utf8 new_dbname < /usr/local/dbname.sql

          總結(jié):這種方法有個致命之處就是當(dāng)數(shù)據(jù)中有大量中文字符和其他特殊符號字符時,很有可能導(dǎo)致在[步驟五]時報錯導(dǎo)致無法正常導(dǎo)入數(shù)據(jù),如果數(shù)據(jù)庫比較大可以分別對每張表執(zhí)行上述步驟

          方法二(推薦大家使用):

          為了解決第一種方法中總結(jié)時說到的問題,在網(wǎng)上苦苦查找了一天資料才東拼西湊的搞出一個比較穩(wěn)妥的解決方法

          步驟一 將待導(dǎo)出的數(shù)據(jù)表的表結(jié)構(gòu)導(dǎo)出(可以用Phpmyadmin、mysqldump等,很簡單就不說了),然后將導(dǎo)出的create table語句的CHARSET=latin1改為CHARSET=utf8,在目標(biāo)庫newdbname中執(zhí)行該create table語句把表結(jié)構(gòu)建好,接下來開始導(dǎo)出-導(dǎo)入數(shù)據(jù)。命令:

          ./mysqldump -d DB_Dig > /usr/local/tmp/tables.sql

           

          步驟二 命令行:進(jìn)入mysql命令行下,mysql -hlocalhost -uroot -p*** dbname

          步驟三 執(zhí)行SQL select * from tbname into outfile '/usr/local/tbname.sql';

          步驟四 將tbname.sql轉(zhuǎn)碼為utf-8格式,建議使用UltraEditor,可以直接使用該編輯器的'轉(zhuǎn)換->ASCII到UTF-8(Unicode編輯)',或者將文件另存為UTF-8(無BOM)格式

          步驟五 在mysql命令行下執(zhí)行語句 set character_set_database=utf8;  注:設(shè)置mysql的環(huán)境變量,這樣mysql在下一步讀取sql文件時將以utf8的形式去解釋該文件內(nèi)容

          步驟六 在mysql命令行下執(zhí)行語句 load data infile 'tbname.sql' into table newdbname.tbname;

          注意:千萬不要忘了第四步

          采用第二種方法,所有數(shù)據(jù)均正常導(dǎo)入,且格式轉(zhuǎn)換成功沒有亂碼。


          參考:http://blog.csdn.net/guoguo1980/archive/2008/01/28/2070701.aspx

          --------------------

              WE準(zhǔn)高手

          posted on 2008-06-11 16:54 大衛(wèi) 閱讀(8973) 評論(8)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          FeedBack:
          # re: mysql編碼轉(zhuǎn)換搞定[未登錄] 2008-06-12 09:08 paul
          lz上文中提到的BOM格式是什么,能具體解釋下嗎?前幾天遇到resin3.0.x的jsp升級到resin3.1.x不能編譯問題。查了一下也提到bom,但沒明白、請lz賜教下  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定 2008-06-12 16:07 懶人
          @paul
          resin3.0.x主要做哪方面開發(fā)來著?  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定 2008-06-12 16:34 愛好編程
          汗 你這篇文章基本上就是原文轉(zhuǎn)載了 還參考啥
          沒有版權(quán)意識 真汗  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定 2008-06-12 22:24 大衛(wèi)
          @paul
          “BOM——Byte Order Mark,就是字節(jié)序標(biāo)記。在這里找到一段關(guān)于BOM的說明:

          在UCS 編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的編碼是FEFF。而FFFE在UCS中是不存在的字符,所以不應(yīng)該出現(xiàn)在實(shí)際傳輸中。UCS規(guī)范建議我們在傳輸字節(jié)流前,先傳輸字符"ZERO WIDTH NO-BREAK SPACE"。這樣如果接收者收到FEFF,就表明這個字節(jié)流是Big-Endian的;如果收到FFFE,就表明這個字節(jié)流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。

          UTF-8不需要BOM來表明字節(jié)順序,但可以用BOM來表明編碼方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF BB BF。所以如果接收者收到以EF BB BF開頭的字節(jié)流,就知道這是UTF-8編碼了。Windows就是使用BOM來標(biāo)記文本文件的編碼方式的。”

          我的理解,BOM就是一些附加信息,實(shí)際上不屬于數(shù)據(jù)內(nèi)容。  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定 2008-06-12 22:27 大衛(wèi)
          @愛好編程
          應(yīng)該怎么做才有版權(quán)意識?我已經(jīng)標(biāo)注了文章出處了。
          另外,我也加上了自己的一些標(biāo)注,是便于自己記錄的。
          而且,我是在尋找了很多方法之后,經(jīng)過此法才成功的,記錄下來,有什么不對嗎?  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定[未登錄] 2008-06-13 09:27 paul
          @懶人
          跟tomcat差不多。servlet容器吧  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定[未登錄] 2008-06-13 11:29 paul
          這篇對bom等編碼又更多解釋
          http://lavasp.javaeye.com/blog/103731  回復(fù)  更多評論
            
          # re: mysql編碼轉(zhuǎn)換搞定 2008-06-13 12:59 ~上善若水~
          傳智播客 &amp; ajax全套獨(dú)家發(fā)布

          1.ajax 入門

          2.ajax 原理

          3.ajax 簡單實(shí)例

          4.ajax 無限級聯(lián)動菜單

          5.ajax 簡易聊天室

          6.ajax 開源框架簡介

          7.DWR 框架源碼分析一

          8.DWR 框架源碼分析二

          9.DWR 框架源碼分析三

          10.DWR 框架源碼分析四

          11.DWR框架源碼分析五

          12.SSH + DWR完成商城驅(qū)動

          13. Extjs 簡介

          14 Extjs&nbsp; 簡單實(shí)例

          15.SSH + Extjs 開發(fā)系列之OA一

          16. SSH + Extjs 開發(fā)系列之OA二

          17. SSH + Extjs 開發(fā)系列之OA三

          18. SSH + Extjs 開發(fā)系列之OA四

          19 .SSH + Extjs 開發(fā)系列之OA五

          20.&nbsp;SSH + Extjs 開發(fā)系列之OA六

          21. SSH + Extjs 開發(fā)系列之OA七

          22.&nbsp;SSH + Extjs 開發(fā)系列之OA八

          23.SSH + Extjs 開發(fā)系列之OA九

          24.SSH + Extjs 開發(fā)系列之OA十

          25. ajax 前景之我見

          下載地址:http://www.ibeifeng.com/read.php?tid=2338&u=5043  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 华宁县| 金溪县| 朝阳县| 准格尔旗| 柳州市| 万荣县| 定结县| 阿拉善盟| 横峰县| 台前县| 浮梁县| 九龙坡区| 新密市| 镇平县| 历史| 广州市| 射阳县| 柞水县| 历史| 临夏市| 南汇区| 柞水县| 莎车县| 富顺县| 毕节市| 郑州市| 客服| 芜湖县| 西乡县| 米脂县| 邵武市| 开平市| 靖远县| 临泉县| 岳阳县| 贞丰县| 平舆县| 玉龙| 德令哈市| 西丰县| 辽宁省|