隨筆-67  評論-522  文章-0  trackbacks-0
              相信很多使用MySQL數(shù)據(jù)庫做開發(fā)的朋友,都或多或少的遇到過中文亂碼的問題。大象根據(jù)項目實踐,在此將自己的成功經(jīng)驗總結(jié)拿出來和大家分享。
              我使用的MySQL數(shù)據(jù)庫版本是5.0.27,按以下幾點處理,可以很好的解決中文亂碼問題。

              1、數(shù)據(jù)庫安裝
              安裝數(shù)據(jù)庫時,有個服務(wù)器的字符集設(shè)置,這里不要使用默認(rèn)的latin1字符集,而應(yīng)該選擇utf8字符集。在創(chuàng)建表的時候,還應(yīng)該設(shè)定默認(rèn)字符集編碼為utf8
              2、數(shù)據(jù)庫配置文件
              假設(shè)你在數(shù)據(jù)庫安裝時,采用了默認(rèn)的字符集設(shè)置,或是使用了gb2312gbk等等,我們可以通過修改MySQL根目錄下的my.ini文件來改變字符編碼。
              打開my.ini文件,修改下圖中畫紅線的部分。
          請注意是utf8,而不是utf-8或UTF-8
              
              第二個紅線部分的設(shè)置很關(guān)鍵,它主要用來指定表字段的默認(rèn)字符集為utf8。大象試過,在所有設(shè)置都相同的情況下,這里如果保留默認(rèn)的latin1,當(dāng)在應(yīng)用中向數(shù)據(jù)庫插入數(shù)據(jù)時,就會出現(xiàn)亂碼。而改成utf8則不會。
              3、數(shù)據(jù)庫工具
              我覺得工具的選擇很重要,現(xiàn)在關(guān)于MySQL的工具也有很多。我也用過很多,在這里我向大家推薦Navicat Lite for MySQL工具,界面如下
              
              界面簡潔,功能強大,特別是能很好的處理中文字符。相信大家都能很快上手。我目前使用的是8.1版。
              4、Eclipse工作空間
              如今使用Eclipse工具做Java開發(fā)的占絕大多數(shù),那么為了避免中文亂碼的發(fā)生,Eclipse的工作空間也應(yīng)該設(shè)置成UTF-8編碼。
              
              5、頁面字符編碼
              我們已經(jīng)將數(shù)據(jù)庫與開發(fā)工具都統(tǒng)一成UTF-8的字符編碼,那么對于展示層的JSP,我們也應(yīng)該進行相應(yīng)的設(shè)置。
              JSP頁面頂部設(shè)置編碼格式

              <%@ page contentType="text/html;charset=UTF-8" %>
              head之間加入meta設(shè)置
              <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
              另外,大象建議表單提交采用post方式。
              6、數(shù)據(jù)庫連接
              連接數(shù)據(jù)庫的地址中我們也應(yīng)該加入字符設(shè)置,請看下面藍(lán)色的字符。
              jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8
              7、容器配置文件
              還有最重要的一個步驟不能忘記,就是要在web.xml中加入字符過濾器。
              <!-- Filter 定義  -->
              <!-- Character Encoding filter -->
              <filter>
                  <filter-name>encodingFilter</filter-name>
                  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                  <init-param>
                      <param-name>encoding</param-name>
                      <param-value>UTF-8</param-value>
                  </init-param>
                  <init-param>
                      <param-name>forceEncoding</param-name>
                      <param-value>true</param-value>
                  </init-param>
              </filter>
              <!-- Filter 映射 -->
              <filter-mapping>
                  <filter-name>encodingFilter</filter-name>
                  <url-pattern>/*</url-pattern>
              </filter-mapping>
              這里用到的是Spring的編碼過濾器,我們可以直接拿來用。不過請注意forceEncoding這個參數(shù),把它設(shè)置為true表示不管請求中的編碼是什么格式,都將強制采用encoding中設(shè)置的編碼方式。另外對于響應(yīng)也將按照encoding指定的編碼進行設(shè)置。
              通過以上幾個步驟,應(yīng)該可以完全解決使用MySQL數(shù)據(jù)庫所帶來的中文亂碼問題。如果你按照這些設(shè)置做過后還是出現(xiàn)了亂碼,請?zhí)岢鰜恚屛覀円黄饋斫鉀Q。
              大象不建議大家為了實現(xiàn)中文問題而采取gb2312gbk等編碼方式,我們應(yīng)該使用基于Unicode的編碼。而UTF-8是目前互聯(lián)網(wǎng)上使用最廣泛的一種Unicode的實現(xiàn)方式,特別是目前JavaEE的企業(yè)級項目,都是基于互聯(lián)網(wǎng)式的Web應(yīng)用。所以我們應(yīng)該使用這種統(tǒng)一的字符集編碼方式。另外,對于SQLServerOracle數(shù)據(jù)庫,不會出現(xiàn)像MySQL這樣的亂碼問題,但我們也應(yīng)該堅持在開發(fā)過程中統(tǒng)一采用UTF-8的編碼方式。希望此文能對大家有所幫助。
              本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://www.aygfsteel.com/bolo
          posted on 2010-04-05 16:37 菠蘿大象 閱讀(5953) 評論(17)  編輯  收藏 所屬分類: Database

          評論:
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-04-06 09:24 | E2
          這個也叫做完全的解決方案,圖片還要加上自己的標(biāo)記,太那個了....  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-04-06 10:55 | 菠蘿大象
          @E2
          這是針對MySQL數(shù)據(jù)庫的中文編碼問題,按照這樣做,可以解決中文亂碼的問題,我沒有夸大,你覺得我哪里寫的不好,可以提出來,但這么模糊的說"這個也叫做完全解決方案",我就不太明白了。另外,圖片加上水印,是防盜轉(zhuǎn),沒有別的意思。  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-04-06 13:49 | Aspen
          說白了,所有地方統(tǒng)一編碼。
            回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-04-06 13:56 | 菠蘿大象
          @Aspen
          可以這么說,我當(dāng)時遇到的問題其實只有兩個。一是在my.ini文件的第二個字符集設(shè)置上,沒有改成utf8。另一個就是工具有問題,生成的數(shù)據(jù)庫和表對中文有BUG,改成Navicat,重新生成一遍就好了。  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案[未登錄] 2010-04-10 08:40 | roypayne
          寫的挺好的。鼓勵一下樓主。謝謝分享。

          另:有些人就會說風(fēng)涼話。  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-04-10 23:15 | 菠蘿大象
          @roypayne
          謝謝支持,我是很用心在寫,也歡迎真正的批評指正,而不是無目的的拍磚。  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-09-10 15:43 | SoJog
          建議把背景換下,這個看著太花了  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-09-10 15:45 | 菠蘿大象
          @SoJog
          呃。。。還好吧,只是一個水印而已,而且很淺吶  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-09-10 15:55 | SoJog
          @菠蘿大象
          這個還好呀,SSH2 ANNOTATION那幾遍文章,汗。。。頭昏  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-09-10 16:01 | 菠蘿大象
          @SoJog
          啊,你千萬別暈,暈了我可沒醫(yī)藥費哦,呵呵。你就將就看吧,你不知道blogjava換圖片好麻煩的,如果不加水印,有些盜文者很可恥,不加轉(zhuǎn)載鏈接,這個我就很生氣了,我歡迎轉(zhuǎn)載,但不歡迎匿名轉(zhuǎn)載。  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-09-11 00:27 | zhhaojie
          樓主真是很用心,謝謝你  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2010-09-13 10:10 | 菠蘿大象
          @zhhaojie
          謝謝支持,我會努力的。  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2012-09-26 20:02 | luhong

          還是不行  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2012-09-26 20:03 | luhong
          以前解決過,現(xiàn)在又沒法弄了。。。只是更改了my.ini文件,我沒涉及到上層應(yīng)用,就是在mysql dos client下插入查找數(shù)據(jù),還是亂碼問題,開始latin,亂碼漢字是???,改成utf8,出現(xiàn)的更不知道是哪國繁體文  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2015-01-29 22:55 | wkl17
          mysql Ver 14.14 Distrib 5.5.34, for Win32 (x86)
          -------
          我直接在[mysqld]下添加
          default-character-set=utf8

          default-character-server=utf8
          ,但之后就無法啟動服務(wù)了..難道其他朋友修改my.ini后都能正常啟動??

          這是我執(zhí)行 status命令后其中的幾行:
          Server characterset: latin1
          Db characterset: gbk
          Client characterset: gbk
          Conn. characterset: gbk  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2015-01-30 08:44 | 菠蘿大象
          @wkl17
          請你仔細(xì)看我文中寫的,我并沒有寫要添加default-character-set=utf8或default-character-server=utf8這些,我只寫了要改編碼。你怎么會添加呢?
          第一個地方要改的是[mysql],改它下面的default-character-set=utf8
          第二個地方[mysqld],這下面改character-set-server=utf8
          以下是我用status顯示的結(jié)果
          -------------------------------
          mysql Ver 14.14 Distrib 5.5.36, for Win32 (x86)

          Connection id: 1
          Current database:
          Current user: root@localhost
          SSL: Not in use
          Using delimiter: ;
          Server version: 5.5.36 MySQL Community Server (GPL)
          Protocol version: 10
          Connection: localhost via TCP/IP
          Server characterset: utf8
          Db characterset: utf8
          Client characterset: utf8
          Conn. characterset: utf8
          TCP port: 3306
          Uptime: 43 sec
          -----------------------------------

          你的很明顯是服務(wù)器端還是latin1字符集,而客戶端卻是gbk,你再好好檢查一下  回復(fù)  更多評論
            
          # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2015-05-24 01:27 | Jared_liu
          謝謝樓主分享,解決了亂碼問題  回復(fù)  更多評論
            
          主站蜘蛛池模板: 正镶白旗| 张家界市| 漠河县| 崇仁县| 南岸区| 丽江市| 化德县| 广汉市| 通海县| 山丹县| 潞城市| 漳浦县| 石狮市| 绥中县| 兴业县| 楚雄市| 普格县| 关岭| 江达县| 长垣县| 徐州市| 吐鲁番市| 崇阳县| 依兰县| 荃湾区| 红河县| 吴桥县| 鱼台县| 泗阳县| 洪雅县| 于田县| 阳山县| 沙湾县| 襄汾县| 田东县| 峨眉山市| 丁青县| 马龙县| 黄平县| 武宣县| 祁阳县|