我使用的MySQL數(shù)據(jù)庫版本是
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è)置,或是使用了gb2312、gbk等等,我們可以通過修改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è)置。<!-- 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>
通過以上幾個步驟,應(yīng)該可以完全解決使用MySQL數(shù)據(jù)庫所帶來的中文亂碼問題。如果你按照這些設(shè)置做過后還是出現(xiàn)了亂碼,請?zhí)岢鰜恚屛覀円黄饋斫鉀Q。
大象不建議大家為了實現(xiàn)中文問題而采取gb2312或gbk等編碼方式,我們應(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)一的字符集編碼方式。另外,對于SQLServer和Oracle數(shù)據(jù)庫,不會出現(xiàn)像MySQL這樣的亂碼問題,但我們也應(yīng)該堅持在開發(fā)過程中統(tǒng)一采用UTF-8的編碼方式。希望此文能對大家有所幫助。
本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://www.aygfsteel.com/bolo