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

          常用鏈接

          留言簿(12)

          隨筆分類

          隨筆檔案

          groovy

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

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

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

          方法一:

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

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

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

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

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

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

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

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

          步驟一 將待導(dǎo)出的數(shù)據(jù)表的表結(jié)構(gòu)導(dǎo)出(可以用Phpmyadmin、mysqldump等,很簡(jiǎn)單就不說(shuō)了),然后將導(dǎo)出的create table語(yǔ)句的CHARSET=latin1改為CHARSET=utf8,在目標(biāo)庫(kù)newdbname中執(zhí)行該create table語(yǔ)句把表結(jié)構(gòu)建好,接下來(lái)開(kāi)始導(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(無(wú)BOM)格式

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

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

          注意:千萬(wàn)不要忘了第四步

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


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

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

              WE準(zhǔn)高手

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

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

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

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

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

          1.ajax 入門(mén)

          2.ajax 原理

          3.ajax 簡(jiǎn)單實(shí)例

          4.ajax 無(wú)限級(jí)聯(lián)動(dòng)菜單

          5.ajax 簡(jiǎn)易聊天室

          6.ajax 開(kāi)源框架簡(jiǎn)介

          7.DWR 框架源碼分析一

          8.DWR 框架源碼分析二

          9.DWR 框架源碼分析三

          10.DWR 框架源碼分析四

          11.DWR框架源碼分析五

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

          13. Extjs 簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

          25. ajax 前景之我見(jiàn)

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 治多县| 阜平县| 罗江县| 延川县| 西宁市| 噶尔县| 开封市| 黄冈市| 济南市| 银川市| 延寿县| 察隅县| 沈阳市| 新化县| 金塔县| 府谷县| 和平区| 临泉县| 彩票| 英山县| 类乌齐县| 张家口市| 逊克县| 连平县| 安乡县| 容城县| 旬阳县| 巴东县| 济源市| 彩票| 美姑县| 临沧市| 垦利县| 泰安市| 嘉荫县| 双流县| 宜兰市| 珠海市| 蛟河市| 错那县| 奈曼旗|