linux上执行java程序,从mysql中查出来的结果,不管怎么编码都是乱码,崩溃了。
先看mysql的设置,
| character_set_client     | latin1                                                   | 
| character_set_connection | latin1                                                   | 
| character_set_database   | utf8                                                     | 
| character_set_filesystem | binary                                                   | 
| character_set_results    | latin1                                                   | 
| character_set_server     | utf8                                                     | 
| character_set_system     | utf8 在mysql控制台,现在有一个表,直接select出来是乱码,设置character_set_results=utf8之后得到是正常中文。
可是我在java程序中,select出来做一次,ISO-8859-1到utf8的字符转换,得到的还是乱码。无解了,大家看看问题出在哪?

解决方案 »

  1.   

    刚刚又测试了一下,jvm默认的字符集是utf8的
      

  2.   

    你把你的mysql卸载了重新装。
    因为用不了多长时间。在装到倒数第5 6步的时候有个选择数据库默认编码的下拉列表框。
    先选择更改字符编码的单选按钮,然后在下拉框中选择UTF-8就行了。
    只要统一了编码,就行了。
      

  3.   


    敢不敢有个不是重装mysql的人...
      

  4.   

    以前也搞过一阵子mysql编码问题还有很多事latin1啊,全设成utf8ISO-8859-1到utf8的字符转换,这样转换对于非latin1的字符能不乱码吗?
      

  5.   

    jdbc的url里面指定characterEncoding=UTF-8
      

  6.   

    所谓latin1不就是ISO-8859-1吗?
    还有,有没有不需要修改mysql设置,不让mysql重启的方法。而是在程序中处理。
      

  7.   


    Connection con = DriverManager.getConnection(url, user, pass);
    使用的是这种方式获取数据库连接,如何指定字符集呢?
      

  8.   

    mysql文件夹里面有个my.ini的文件,用记事本打开后把mysql的字符集编码修改成与JVM一样的编码啊
    default-character-set=xxx
    default-character-set=xxx
    把这两个字符集都改成和JVM一样的编码,然后重起mysql服务
      

  9.   

    你试一下在url后加一个指定字符集的看行不?
      

  10.   

    Connection con = DriverManager.getConnection(url+"?characterEncoding=UTF-8", user, pass);
      

  11.   


    对于这个问题我是这样看的,假如程序中有可以处理又不用重启的方法,那修改mysql设置何必要重启呢?
      

  12.   


    加上了,还是不好使呀!
    有没有人能具体解释一下,各个编码设置是如何影响程序中的数据的。
    比如character_set_connection=latin1,实在什么情况下用到这个设置?使用java api连接的mysql的时候,对从mysql得到的数据进行latin1的编码解释?
      

  13.   

    重装是光荣的事情。或者把sql文件倒出来,然后在再那个sql文件改一下数据库编码是utf——8就行了。
      

  14.   

    是说先把sql文件导出来,然后卸载重装,然后在sql文件改数据库编码是utf-8.
      

  15.   

    可以不讨论这种卸载重装mysql的问题吗?
    既然有这种设置,应该可以再程序中解决吧,请大家讨论讨论,能不能使用程序转换编码解决。
    网上有很多说明怎么处理mysql乱码的问题,我都看过了。基本统一的就是说修改配置文件,把所有字符集都设成utf8,可是目前我不存在这种条件,不能更改设置,重启mysql,唯一的途径就是通过程序途径实现。
      

  16.   

    user="";
    pass=""
    url="jdbc:mysql://127.0.0.1:3306/testcharacterEncoding=gb2312&autoReconnect=true"
    Connection con = DriverManager.getConnection(url, user, pass);自己试一下吧,我的mysql可以,不过用的是连接池URL如上,user,pass是自己的
      

  17.   

    user="";
    pass=""
    url="jdbc:mysql://127.0.0.1:3306/testcharacterEncoding=gb2312&autoReconnect=true"
    Connection con = DriverManager.getConnection(url, user, pass);自己试一下吧,我的mysql可以,不过用的是连接池URL如上,user,pass是自己的
      

  18.   

    晕,怎么变了,是这样的
    url=
    "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=gb2312&autoReconnect=true"
      

  19.   

    俺的服务器encode是utf8的,我连接的时候加了characterEncoding=utf8,可是没啥效果。
      

  20.   

    这个我也不清楚,可能是结尾多了autoReconnect=true吧。不知道你的有没有?
      

  21.   

    大哥呀,加不加autoReconnect 和字符集没啥关系。
      

  22.   

    嗯,数据在数据库没问题,不知道你看到我之前贴的数据库字符集设置没有
    | character_set_client | latin1 | 
    | character_set_connection | latin1 | 
    | character_set_database | utf8 | 
    | character_set_filesystem | binary | 
    | character_set_results | latin1 | 
    | character_set_server | utf8 | 
    | character_set_system | utf8  
    存入的数据都是utf8编码的,直接用selec * from table_name 得到的结果由于character_set_results设置的是latin1,所以在控制台显示是乱码。不过只要设置set character_set_results=utf8,显示的都是正常的。
    总之,数据没有问题,绝对都是utf8编码的数据,这个我可以保证。
      

  23.   

    顺便再说一句,我的程序是在windows上编辑并且编译,然后class文件传到linux服务器去跑。不过我想这应该不会有什么问题吧。虽然在windows上,JVM默认的字符集是GBK,在linux上,JVM默认的字符集是utf8.可是数据是从数据库出的,应该和程序编译的平台没有关系吧。
      

  24.   


    理论上是没有问题,java不是也说一次编译处处运行吗!但是我前几天看到有人在别的帖子回复说,有时会有问题,最好重新编译一下!具体怎么回事我也不知道。
      

  25.   

    编译倒是重新编译了,不过还是一样的结果。
    难道就没有人对字符集的问题有比较透彻的理解吗?看了javaeye上的文章,感觉说的都好模糊。
      

  26.   


    既然是一个映射,那你能根据各个字符集的设置,详细描述一下整个过程做了哪些字符集的映射吗?
    例如,我的mysql设置如下
    | character_set_client | latin1 | 
    | character_set_connection | latin1 | 
    | character_set_database | utf8 | 
    | character_set_filesystem | binary | 
    | character_set_results | latin1 | 
    | character_set_server | utf8 | 
    | character_set_system | utf8 
    现在数据库有个表A,字段为id int(11),name(varchar(20),出入一条数据,(1,张三),存入的数据字符编码是utf8的。那么现在我通过jdbc的api,连接并查询数据。SQL语句为
    select * from A
    那么整个过程中都涉及了哪些字符集所做的映射?
    说明下,jdbc连接的时候,url指定了encoding=utf8;
      

  27.   

    它有很多字符集名目,各有适用,具体的细节我未必知道的那么细,可能查一下就知道了
    但粗略地应该知道,数据库中数据存储至少有个映射规则吧,比如对应character_set_database连接时如果有跨网络数据传输,客户端显示字符需要一个映射规则吧
    如果仅仅是select,用的可以是数据库编码
      

  28.   

    select (字段 USING UTF8) FROM 表,我理解的是不是简单了?
    我以前遇到过,不用重装mysql,就是在建库的时候有个字符集选择的地方,然后把表倒过去。
      

  29.   

    你能不能贴个得到的乱码大家看看。
    应该来说可以直接在java中写代码用于转换字符编码的
      

  30.   

    http://getspring.blog.163.com/blog/static/115300609201032693170/