MySQL支持几十种编码方式,并且默认的编码为latin1(一种西方字符编码方式)对中文支持不太好,因此需要设置MySQL的编码方式。如果没有设置或者设置不对很容易出现中文乱码。
常见的中文编码方式有GB2312、GBK、GB18030、UTF-8等。GB2312是针对中文的编码方式,每个汉字均占两个字节,解析比较简单,但是仅能编码中文字符。中文网站往往采用GB2312编码,例如BAIDU。GBK类似于GB2312,但是比GB2312编码更多的中文以及中文字符。GB18030又比GBK广泛,不仅可以编码中文,还可以编码少数名族的语言。
UTF-8能够编码目前为止的任意语言,国际化的网站往往采用UTF-8编码,例如Google.但是UTF-8编码比较浪费空间,有点汉字编码后能占到3个字节,解析也比较复杂。设置MySQL编码有三种途径。
从控制台修改编码
ALTER DATABASE databaseWeb CHARACTER SET utf8;
查看当前数据库的编码方式端的命令为:
show variables like 'character_set_database';
注意修改数据库编码不会影响已经存在的表的编码方式。如果表的编码方式原来为latin1,还需要单独修改表的编码方式。修改某个表的编码方式的SQL为:
ALTER TABLE table_name CHARACTER SET utf8;
也可以在创建数据库的时候指定编码方式,例如:
CREATE DATABASE some_database CHARACTER SET utf8;
从配置文件修改编码
修改配置文件。用记事本打开MySQL目录下的my.ini文件,找到下面一句话:
default-character-set=latin1
应该有两行这样的代码。将编码方式latin1都修改为utf-8即可。注意修改参数只会影响以后创建的数据库、表,但不会影响已经存在的数据库、表。
URL中指定编码方式
另外,还需要指定JDBC连接的编码方式,方法是修改连接URL,例如:
Connection conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/databaseWeb?unicode=true&characterEncoding=UTF-8"
"root",
"admin"
);
做了上述设定后,一般就没有乱码了。如果还有乱码,请检查是否对request进行了编码。如果没有,从request取到的字符串也会乱码。注意JSP页面编码、request编码、response编码、数据库编码必须一致。
Tomcat的server.xml中也要修改,为GET方式获取数据添加URIEncoding参数,指定为UTF-8编码(默认为ISO-8859-1编码),代码为:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />