环境是Tomcat 6.0、mysql5、jsp
在mysql数据库里中文都能正常显示,但我用java 查出来的中文全变成乱码了。mysql驱动是:com.mysql.jdbc.Driver
url:jdbc:mysql://127.0.0.1:3306/bbs?useUnicode=true&characterEncoding=GBK
jsp中:<%@ page contentType="text/html;charset=GBK"%>数据库字符集:mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | gbk                              |
| character_set_connection | gbk                              |
| character_set_database   | gbk                              |
| character_set_filesystem | binary                           |
| character_set_results    | gbk                              |
| character_set_server     | gbk                              |
| character_set_system     | utf8                             |
| character_sets_dir       | D:\AppServ\MySQL\share\charsets\ |
+--------------------------+----------------------------------+
8 rows in set (0.06 sec)我甚至用了过滤器,还是不行,用java查询时:
DBConnect dbc=new DBConnect("select * from config");

ResultSet rs=dbc.executeQuery();

ResultSetMetaData rsmd=rs.getMetaData(); 
rs.next();
for(int i=1;i<=rsmd.getColumnCount();i++){
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@----------"+rsmd.getColumnName(i));
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@-----------"+rs.getString(i));//此处中文全部变成???号了
forumHash.put(rsmd.getColumnName(i),rs.getString(i));
}
dbc.close();
哪位大侠知道一下啊,谢谢了

解决方案 »

  1.   

    http://coolboyyang.javaeye.com/blog/250972
      

  2.   

       编码中统一用 utf-8 编码另外连接数据库的时候后面加一个编码  Encoding=utf8
      

  3.   

    关键字: java与mysql乱码的问题 
    解决方法一:(最重要的一种方法) 
    你看下my.ini,有无 
    [mysql] default-character-set=utf8 [client] 
    default-character-set=utf8 [mysqld] 
    default-character-set=utf8 
    然后建立表时,也要用(比如) 
    DROP   TABLE   IF   EXISTS   `Company`; 
    CREATE   TABLE   IF   NOT   EXISTS   `Company` 

        `Cname`   VARCHAR(10)   NOT   NULL, 
        `Caddr`   VARCHAR(100), 
        `Ctel`     VARCHAR(16) 
    )ENGINE=InnoDB   DEFAULT   CHARSET=UTF8; 
    这样就没问题。 如果是jsp要声明: 
    contentType="text/html;charset=gb2312" 
    解决方法二: 连接mysql时(无论在从mysql读还是取数据的情况),指定使用的编码方式为utf-8,具体代码如下 //装载mysql-jdbc驱动 Class.forName("com.mysql.jdbc.Driver").newInstance(); //连接数据库 Connection sqlCon = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test?                         user=root&password=1&useUnicode=true&characterEncoding=utf-8" ); 
    解决方法三: 如果方法一不行那么在方法一的基础上对读入的字符串进行强制编码方式转换。 代码示例如下: String name = rst.getString("name"); 
    name= new String(name.getBytes("ISO-8859-1"),"utf-8"); 注:代码也可以为:String name =new String( rst.getString("name").getBytes("ISO-8859-1"),"utf-8"));其中rst为返回的resultset,ISO-8859-1为mysql默认的编码方式,代码的目的是把以ISO-8859-1的编码转换为gb2312编码方式,这样强制转换,可以解决一部分问题,如果结合方法一,应该可以解决中文乱码问题。 
    解决方法四: 这个方法在有些文章里是首推的,我首先也是试了这个方法,但是好像不行。这里还是说一下,不知是不是我操作错误。还是先贴原文吧: "如果数据库中有中文的话而mysql默认的语言不是中文时要在配置文件C:winntmy.ini 中的 [mysqld] 里添加一行: default-character-set=utf-8 然后重起mysql 
    方法五:在tomcat conf  里面的web.xml里面更改: <filter>   
    <filter-name>UTFEncoding</filter-name>      <filter-class>com.founder.chenph.Util.EncodingFilter_UTF8      </filter-class>   
              <init-param>   
                  <param-name>encoding</param-name>   
                  <param-value>UTF-8</param-value>   
              </init-param>   
    </filter>   
              <filter-mapping>   
              <filter-name>UTFEncoding</filter-name>   
              <url-pattern>*.jsp</url-pattern>   
          </filter-mapping>   
          <filter-mapping>   
              <filter-name>UTFEncoding</filter-name>   
              <url-pattern>*.do</url-pattern>   
          </filter-mapping>
      

  4.   

    我在mysql控制台上用select * from config; 查出来的是正常的,在用java查询出来的都变成乱码了。楼上的几种方法我都试过了,还是不行,不知道到底是什么地方除了问题
      

  5.   

    说到底还是你的数据库有问题,数据库用UTF-8,表的编码也用UTF-8,页面编码UTF-8。OK了
      

  6.   

    request.setCharacterEncoding("utf-8");
      

  7.   

    你项目中类的编码(type filter text)是不是GBK
      

  8.   

    你顶楼贴的做法是没有问题的。不应该乱码。另外,因为你的代码和页面还没有交互,那些页面有关的什么设置过滤器什么的,都暂时不要考虑的。重新建表,从java中插入数据试试看。
      

  9.   

    先查mysql数据库的配置是否已设置为utf-8或是gbk,然后再在代码中把所有的编码格式都更正成utf-8或gbk
      

  10.   

    建议:出现这种问题,我遇到过。我的解决办法。查看mysql的配置文件my.ini查看真正是不是utf-8编码。因为你在安装的过程中,你如果不选择中间的那个。utf-8其实还没有改过来。在就看看你eclipse中的编码。
      

  11.   

    推荐写一个工具类 如Chinese 将取出来的数据进行编码转换啊
      

  12.   

    安装mysql的时候选择日本语!~
      

  13.   

    我这几天也遇到了这个问题,mysql默认为latin,全都set成gb2312绝对没问题,设置完别忘了重新建表,system不用改。相信我!!
      

  14.   

    你mysql不是中文编码的,或者你把读出来的数据都格式化成中文
      

  15.   

    这样的问题我也有过。你可以去我的blog里面看一下我写的,不是很详细,但是mysql的存储问题也写了出来。如果说在你后台数据库里面的中文是正常的,那说明你类的编码可能是utf8的。因为出现问号的原因是GBK传UTF8时发生的错误,GBK是二位码,UTF8是三位码,GBK不符合UTF8的编码规范,所以会是??,反过来。UTF8到GBK他也会是乱码。像繁体字的乱码
      

  16.   

    mysql装的是gbk?eclipse里的编码也用gbk去取。
      

  17.   

    重新配置一下MySQL编码(如GBK),以后建表的时候不要自己再设置编码了,就用配置的默认编码(如GBK)就好了。JSP页面当然也得和数据库统一编码了。呵呵。
      

  18.   

    就是编码问题 统一就好啦  tomcat也要设 编码 默认是  iso-8859-1
      

  19.   

    将数据库的编码设成gbk也可以的!