Tomcat+mysql字符集问题

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

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />sql

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

开启应用,访问并登陆应用以后以后,发现出现字符乱码问题,排查多是数据库问题,进入数据库mysql,查看字符集:服务器

show variables like '%char%';编码

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

character_set_client 、character_set_connection、character_set_results 这三个设置是客户端每次链接进来设置的。登陆mysql以后,命令:SET names utf8; 就至关于设置了此三个选项,也能够分别设置:xml

SET character_set_client = utf8;ip

SET character_set_connection = utf8;utf-8

SET character_set_results = utf8;io

退出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

相关文章
相关标签/搜索