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

相信很多使用MySQL數據庫做開發的朋友,都或多或少的遇到過中文亂碼的問題。大象根據項目實踐,在此將自己的成功經驗總結拿出來和大家分享。
    我使用的MySQL數據庫版本是5.0.27,按以下幾點處理,可以很好的解決中文亂碼問題。

    1、數據庫安裝
    安裝數據庫時,有個服務器的字符集設置,這裏不要使用默認的latin1字符集,而應該選擇utf8字符集。在創建表的時候,還應該設定默認字符集編碼爲utf8
    2、數據庫配置文件
    假設你在數據庫安裝時,採用了默認的字符集設置,或是使用了gb2312gbk等等,我們可以通過修改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方式。
    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數據庫所帶來的中文亂碼問題。如果你按照這些設置做過後還是出現了亂碼,請提出來,讓我們一起來解決。
    大象不建議大家爲了實現中文問題而採取gb2312gbk等編碼方式,我們應該使用基於Unicode的編碼。而UTF-8是目前互聯網上使用最廣泛的一種Unicode的實現方式,特別是目前JavaEE的企業級項目,都是基於互聯網式的Web應用。所以我們應該使用這種統一的字符集編碼方式。另外,對於SQLServerOracle數據庫,不會出現像MySQL這樣的亂碼問題,但我們也應該堅持在開發過程中統一採用UTF-8的編碼方式。希望此文能對大家有所幫助。
    本文爲菠蘿大象原創,如要轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章