<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

        1、數(shù)據(jù)庫(kù)安裝
        安裝數(shù)據(jù)庫(kù)時(shí),有個(gè)服務(wù)器的字符集設(shè)置,這里不要使用默認(rèn)的latin1字符集,而應(yīng)該選擇utf8字符集。在創(chuàng)建表的時(shí)候,還應(yīng)該設(shè)定默認(rèn)字符集編碼為utf8。
        2、數(shù)據(jù)庫(kù)配置文件
        假設(shè)你在數(shù)據(jù)庫(kù)安裝時(shí),采用了默認(rèn)的字符集設(shè)置,或是使用了gb2312gbk等等,我們可以通過(guò)修改MySQL根目錄下的my.ini文件來(lái)改變字符編碼。
        打開(kāi)my.ini文件,修改下圖中畫(huà)紅線的部分。
    請(qǐng)注意是utf8,而不是utf-8或UTF-8
        
        第二個(gè)紅線部分的設(shè)置很關(guān)鍵,它主要用來(lái)指定表字段的默認(rèn)字符集為utf8。大象試過(guò),在所有設(shè)置都相同的情況下,這里如果保留默認(rèn)的latin1,當(dāng)在應(yīng)用中向數(shù)據(jù)庫(kù)插入數(shù)據(jù)時(shí),就會(huì)出現(xiàn)亂碼。而改成utf8則不會(huì)。
        3、數(shù)據(jù)庫(kù)工具
        我覺(jué)得工具的選擇很重要,現(xiàn)在關(guān)于MySQL的工具也有很多。我也用過(guò)很多,在這里我向大家推薦Navicat Lite for MySQL工具,界面如下
        
        界面簡(jiǎn)潔,功能強(qiáng)大,特別是能很好的處理中文字符。相信大家都能很快上手。我目前使用的是8.1版。
        4、Eclipse工作空間
        如今使用Eclipse工具做Java開(kāi)發(fā)的占絕大多數(shù),那么為了避免中文亂碼的發(fā)生,Eclipse的工作空間也應(yīng)該設(shè)置成UTF-8編碼。
        
        5、頁(yè)面字符編碼
        我們已經(jīng)將數(shù)據(jù)庫(kù)與開(kāi)發(fā)工具都統(tǒng)一成UTF-8的字符編碼,那么對(duì)于展示層的JSP,我們也應(yīng)該進(jìn)行相應(yīng)的設(shè)置。
        JSP頁(yè)面頂部設(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ù)庫(kù)連接
        連接數(shù)據(jù)庫(kù)的地址中我們也應(yīng)該加入字符設(shè)置,請(qǐng)看下面藍(lán)色的字符。
        jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8
        7、容器配置文件
        還有最重要的一個(gè)步驟不能忘記,就是要在web.xml中加入字符過(guò)濾器。
        <!-- 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的編碼過(guò)濾器,我們可以直接拿來(lái)用。不過(guò)請(qǐng)注意forceEncoding這個(gè)參數(shù),把它設(shè)置為true表示不管請(qǐng)求中的編碼是什么格式,都將強(qiáng)制采用encoding中設(shè)置的編碼方式。另外對(duì)于響應(yīng)也將按照encoding指定的編碼進(jìn)行設(shè)置。
        通過(guò)以上幾個(gè)步驟,應(yīng)該可以完全解決使用MySQL數(shù)據(jù)庫(kù)所帶來(lái)的中文亂碼問(wèn)題。如果你按照這些設(shè)置做過(guò)后還是出現(xiàn)了亂碼,請(qǐng)?zhí)岢鰜?lái),讓我們一起來(lái)解決。
        大象不建議大家為了實(shí)現(xiàn)中文問(wèn)題而采取gb2312gbk等編碼方式,我們應(yīng)該使用基于Unicode的編碼。而UTF-8是目前互聯(lián)網(wǎng)上使用最廣泛的一種Unicode的實(shí)現(xiàn)方式,特別是目前JavaEE的企業(yè)級(jí)項(xiàng)目,都是基于互聯(lián)網(wǎng)式的Web應(yīng)用。所以我們應(yīng)該使用這種統(tǒng)一的字符集編碼方式。另外,對(duì)于SQLServerOracle數(shù)據(jù)庫(kù),不會(huì)出現(xiàn)像MySQL這樣的亂碼問(wèn)題,但我們也應(yīng)該堅(jiān)持在開(kāi)發(fā)過(guò)程中統(tǒng)一采用UTF-8的編碼方式。希望此文能對(duì)大家有所幫助。
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請(qǐng)注明出處。http://www.tkk7.com/bolo
    posted on 2010-04-05 16:37 菠蘿大象 閱讀(5943) 評(píng)論(17)  編輯  收藏 所屬分類(lèi): Database

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

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

    還是不行  回復(fù)  更多評(píng)論
      
    # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2012-09-26 20:03 | luhong
    以前解決過(guò),現(xiàn)在又沒(méi)法弄了。。。只是更改了my.ini文件,我沒(méi)涉及到上層應(yīng)用,就是在mysql dos client下插入查找數(shù)據(jù),還是亂碼問(wèn)題,開(kāi)始latin,亂碼漢字是???,改成utf8,出現(xiàn)的更不知道是哪國(guó)繁體文  回復(fù)  更多評(píng)論
      
    # 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ú)法啟動(dòng)服務(wù)了..難道其他朋友修改my.ini后都能正常啟動(dòng)??

    這是我執(zhí)行 status命令后其中的幾行:
    Server characterset: latin1
    Db characterset: gbk
    Client characterset: gbk
    Conn. characterset: gbk  回復(fù)  更多評(píng)論
      
    # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2015-01-30 08:44 | 菠蘿大象
    @wkl17
    請(qǐng)你仔細(xì)看我文中寫(xiě)的,我并沒(méi)有寫(xiě)要添加default-character-set=utf8或default-character-server=utf8這些,我只寫(xiě)了要改編碼。你怎么會(huì)添加呢?
    第一個(gè)地方要改的是[mysql],改它下面的default-character-set=utf8
    第二個(gè)地方[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字符集,而客戶(hù)端卻是gbk,你再好好檢查一下  回復(fù)  更多評(píng)論
      
    # re: JavaEE應(yīng)用中MySQL中文亂碼完全解決方案 2015-05-24 01:27 | Jared_liu
    謝謝樓主分享,解決了亂碼問(wèn)題  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲国产精品无码专区影院| 亚洲精品视频在线观看你懂的| 青青草免费在线视频| 成人免费网站在线观看| 大胆亚洲人体视频| 亚洲中文字幕第一页在线| 亚洲国产精品第一区二区| 亚洲卡一卡2卡三卡4麻豆| 亚洲中文字幕AV每天更新| 猫咪免费人成在线网站| 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 国产一区二区三区免费看| 亚洲人成色77777在线观看大| 亚洲精品乱码久久久久久按摩| 久久久久亚洲AV无码麻豆| 亚洲人成网站免费播放| 成人福利在线观看免费视频| 久久国产精品免费视频| 成年女人色毛片免费看| 亚洲精品成人在线| 亚洲欧洲校园自拍都市| 偷自拍亚洲视频在线观看99| 成人性生交大片免费看中文| 毛片免费在线观看网址| 亚洲日本中文字幕一区二区三区| 亚洲男人都懂得羞羞网站| 亚洲AV永久无码天堂影院| a级毛片高清免费视频就| 在人线av无码免费高潮喷水| 亚洲精品无码专区2| 亚洲白色白色永久观看| 特级一级毛片免费看| 1000部啪啪未满十八勿入免费| 国产在线观看免费完整版中文版| 亚洲精品乱码久久久久久自慰| 精品丝袜国产自在线拍亚洲| 国产99精品一区二区三区免费 | 亚洲视频免费在线观看| 国产美女被遭强高潮免费网站| 亚洲国产精品无码一线岛国| 亚洲色偷偷色噜噜狠狠99网|