我使用的MySQL數據庫版本是
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方式。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>
<!-- 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的編碼方式。希望此文能對大家有所幫助。
本文爲菠蘿大象原創,如要轉載請註明出處。
通過以上幾個步驟,應該可以完全解決使用MySQL數據庫所帶來的中文亂碼問題。如果你按照這些設置做過後還是出現了亂碼,請提出來,讓我們一起來解決。
大象不建議大家爲了實現中文問題而採取gb2312或gbk等編碼方式,我們應該使用基於Unicode的編碼。而UTF-8是目前互聯網上使用最廣泛的一種Unicode的實現方式,特別是目前JavaEE的企業級項目,都是基於互聯網式的Web應用。所以我們應該使用這種統一的字符集編碼方式。另外,對於SQLServer和Oracle數據庫,不會出現像MySQL這樣的亂碼問題,但我們也應該堅持在開發過程中統一採用UTF-8的編碼方式。希望此文能對大家有所幫助。
本文爲菠蘿大象原創,如要轉載請註明出處。