在我的webapp后台输出的sql语句中文正常,将该sql语句直接拿到mysql控制台执行,数据库中数据也正常,但是当通过jdbc来执行该sql语句的时候就出现乱码。
在另一个webapp里连接的是同一个mysql服务器上的不同数据库,却一切正常。
我对比了这两个webapp所连接的数据库和数据表的字符集,都是一样的,而且他们连接数据库的连接字符串也只是数据库名称、用户名、密码不一样,其它都一眼个,不晓得为什么会出现这种情况。
数据库的连接字符串如下:
jdbc:mysql://127.0.0.1:3306/cooderfun?user=cooder&password=cooder&useUnicode=true
在另一个webapp里连接的是同一个mysql服务器上的不同数据库,却一切正常。
我对比了这两个webapp所连接的数据库和数据表的字符集,都是一样的,而且他们连接数据库的连接字符串也只是数据库名称、用户名、密码不一样,其它都一眼个,不晓得为什么会出现这种情况。
数据库的连接字符串如下:
jdbc:mysql://127.0.0.1:3306/cooderfun?user=cooder&password=cooder&useUnicode=true
首先明确一点,乱码是因为编码不一致,所以防止乱码的方法无非就是保证编码的一致。
1 如果你使用eclipse的话,就把workspace的编码改为UTF-8
2 把你的所有网页(包括html,jsp)的编码全部改为UTF-8,只要涉及编码的地方都改为UTF-8;
并且用一个过滤器设置request和response的编码都为UTF-8;
3 修改mysql编码。编辑mysql安装目录下的my.ini文件,把客户端的编码改为gbk;把服务器端的编码改为utf8.修改mysql安装目录下的my.ini文档
里面有两个 “default-character-set”;
把[mysql] 中的设为:
default-character-set=gbk
把[mysqld]中的设为:
default-character-set=utf8
修改完毕后保存,并重启mysql服务器。
然后查看mysql编码,
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | GBK |
| character_set_connection | GBK |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | GBK |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.10 sec)但是你原来的数据库必须重建,即删掉数据库,然后重建数据库,重建表,这样就不会乱码。