在我的webapp后台输出的sql语句中文正常,将该sql语句直接拿到mysql控制台执行,数据库中数据也正常,但是当通过jdbc来执行该sql语句的时候就出现乱码。
在另一个webapp里连接的是同一个mysql服务器上的不同数据库,却一切正常。
我对比了这两个webapp所连接的数据库和数据表的字符集,都是一样的,而且他们连接数据库的连接字符串也只是数据库名称、用户名、密码不一样,其它都一眼个,不晓得为什么会出现这种情况。
数据库的连接字符串如下:
jdbc:mysql://127.0.0.1:3306/cooderfun?user=cooder&password=cooder&useUnicode=true

解决方案 »

  1.   

    jdbc:mysql://127.0.0.1:3306/cooderfun?user=cooder&password=cooder&useUnicode=true&characterEncoding=gb2313
      

  2.   

    jdbc:mysql://127.0.0.1:3306/cooderfun?user=cooder&password=cooder&useUnicode=true&characterEncoding=utf-8
      

  3.   

    告诉一个百试不爽的方法,保证绝对不会出现乱码:
    首先明确一点,乱码是因为编码不一致,所以防止乱码的方法无非就是保证编码的一致。
    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)但是你原来的数据库必须重建,即删掉数据库,然后重建数据库,重建表,这样就不会乱码。