Tomact设置字符集,在Tomcat家目录下的conf中的server.xml配置文件,在配置端口的选项中设置字符集:

<Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />

其中,8080端口为可以访问应用的端口,connectionTimeout为连接超时时间, URIEncoding="UTF-8",设置字符集为utf-8,useBodyEncodingForURI="true"表示请求参数的编码方式要使用请求体的编码方式。

开启应用,访问并登录应用之后之后,发现出现字符乱码问题,排查可能是数据库问题,进入数据库mysql,查看字符集:

show variables like '%char%';

Tomcat+mysql字符集问题_数据

可以看到,红色框内的character_set_database字符集为utf8的,但是访问应用时仍然出现乱码问题, 查看其他设置,黄色框内的字符集为Latin1,这是数据库初始配置,这里不设置也可能出现乱码问题。

character_set_client 、character_set_connection、character_set_results 这三个设置是客户端每次连接进来设置的。登录mysql之后,命令:SET names utf8; 就相当于设置了此三个选项,也可以分别设置:

SET character_set_client = utf8;

SET character_set_connection = utf8;

SET character_set_results = utf8;

退出mysql连接之后,重新启动应用服务,登录应用,查看字符集。

备注:三个选项字符集是需要远程连接mysql的客户端进行设置的,详解,

 character_set_client :发送的数据必须与client指定的编码相同,服务器会使用该编码来解读客户端发送过来的数据;

character_set_connection:通过此设置与client相同,该编码不会导致乱码,当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码,只要客户端发送过来的数据与client指定的编码一致,就不会出现问题;

character_set_results :响应的编码,即查询结果返回给客户端的编码,说明客户端必须使用result指定的编码来解码。

客户端远程连接mysql默认是拉丁字符集,但是执行的数据库文件指定字符集为utf8的,所以在执行之后,访问应用会出现乱码问题。

Linux下远程mysql,最好指定字符集,不然会出现乱码问题:

mysql -h <mysql_ip>:<port> -u <user_name> -p <password> --default-character-set=utf8