在JSP-->Servlet-->DAO-->MySQL設(shè)計(jì)的過程中人断,中文亂碼的問題時(shí)常出現(xiàn)蚁署。最常出問題的地方在MySQL中绣版。其次還有網(wǎng)頁編碼的問題鲤拿,request請求解析的編碼問題假褪。
- MySQL
MySQL默認(rèn)的編碼格式為latin1,而不是常用的utf8,查看MySQL的編碼格式只需執(zhí)行
show variables like '%char%'
。
可以看到database和server默認(rèn)的編碼為latin1近顷。如果想永久的更改編碼為utf8,則需要更改MySQL的配置文件/etc/my.cnf
生音。
MySQL默認(rèn)設(shè)置
在linux系統(tǒng)中
/etc/my.cnf
文件默認(rèn)不存在,但my.cnf存在于/etc/mysql/my.cnf
cd /etc/mysql
sudo vim my.cnf
//添加
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
保存文件后,
cp my.cnf /etc
,復(fù)制到etc目錄下,重啟mysql:service mysql restart
重新進(jìn)入mysql,show variables like %char%
,會發(fā)現(xiàn)編碼已經(jīng)全都變?yōu)閡tf8。(此編碼只對以后創(chuàng)建的數(shù)據(jù)庫有用窒升,更改之前的數(shù)據(jù)庫的編碼未變)
更改格式之后
- JSP頁面設(shè)置
JSP頁面中使用page命令設(shè)置網(wǎng)頁的編碼格式為utf8:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
3.Request請求
我們在使用request.getParameter()方法獲取屬性時(shí)缀遍,request默認(rèn)使用的是"ISO-8859-1"編碼,為了統(tǒng)一編碼饱须,應(yīng)在request.getParameter()方法之前設(shè)置使用utf8來解析:
request.setCharacterEncoding("UTF-8");