天天看點

JavaEE應用中MySQL中文亂碼完全解決方案

      相信很多使用MySQL資料庫做開發的朋友,都或多或少的遇到過中文亂碼的問題。大象根據項目實踐,在此将自己的成功經驗總結拿出來和大家分享。

    我使用的MySQL資料庫版本是5.0.27,按以下幾點處理,可以很好的解決中文亂碼問題。

    1、資料庫安裝

    安裝資料庫時,有個伺服器的字元集設定,這裡不要使用預設的latin1字元集,而應該選擇utf8字元集。在建立表的時候,還應該設定預設字元集編碼為utf8。

    2、資料庫配置檔案

    假設你在資料庫安裝時,采用了預設的字元集設定,或是使用了gb2312、gbk等等,我們可以通過修改MySQL根目錄下的my.ini檔案來改變字元編碼。

    打開my.ini檔案,修改下圖中畫紅線的部分。請注意是utf8,而不是utf-8或UTF-8

    第二個紅線部分的設定很關鍵,它主要用來指定表字段的預設字元集為utf8。大象試過,在所有設定都相同的情況下,這裡如果保留預設的latin1,當在應用中向資料庫插入資料時,就會出現亂碼。而改成utf8則不會。

    3、資料庫工具

    我覺得工具的選擇很重要,現在關于MySQL的工具也有很多。我也用過很多,在這裡我向大家推薦Navicat Lite for MySQL工具,界面如下:

    界面簡潔,功能強大,特别是能很好的進行中文字元。相信大家都能很快上手。我目前使用的是8.1版。

    4、Eclipse工作空間

    如今使用Eclipse工具做Java開發的占絕大多數,那麼為了避免中文亂碼的發生,Eclipse的工作空間也應該設定成UTF-8編碼。

    5、頁面字元編碼

    我們已經将資料庫與開發工具都統一成UTF-8的字元編碼,那麼對于展示層的JSP,我們也應該進行相應的設定。

    在JSP頁面頂部設定編碼格式

    <%@ page contentType="text/html;charset=UTF-8" %>      在head之間加入meta設定

    < meta http-equiv = "Content-Type" content = "text/html;charset=utf-8" />      另外,大象建議表單送出采用post方式。    Window-->Preferences-->MyEclipse-->Files and Editors-->JSP-->Encoding          6、資料庫連接配接

     連接配接資料庫的位址中我們也應該加入字元設定,請看下面藍色的字元。

    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這個參數,把它設定為true表示不管請求中的編碼是什麼格式,都将強制采用encoding中設定的編碼方式。另外對于響應也将按照encoding指定的編碼進行設定。

    通過以上幾個步驟,應該可以完全解決使用MySQL資料庫所帶來的中文亂碼問題。如果你按照這些設定做過後還是出現了亂碼,請提出來,讓我們一起來解決。

    大象不建議大家為了實作中文問題而采取gb2312或gbk等編碼方式,我們應該使用基于Unicode的編碼。而UTF-8是目前網際網路上使用最廣泛的一種Unicode的實作方式,特别是目前JavaEE的企業級項目,都是基于網際網路式的Web應用。是以我們應該使用這種統一的字元集編碼方式。另外,對于SQLServer和Oracle資料庫,不會出現像MySQL這樣的亂碼問題,但我們也應該堅持在開發過程中統一采用UTF-8的編碼方式。希望此文能對大家有所幫助。

    本文為鳳梨大象原創,如要轉載請注明出處。 http://www.blogjava.net/bolo/archive/2010/04/05/317494.html