我的问题是这样的现在有一个系统(redhat 9),大概是03年的时候开发的。
现在我需要把这个系统升级一下并加入新的模块,把原来的用的tomcat4,mysql4,jdk1.4换为最新稳定版。
现在全部换过之后出现了乱码问题。
安装过程是这样的,我先安装了JDK 6,安装之后一切正常没有乱码,安装tomcat6也是一切正常。
但是安装完mysql就出现了乱码,mysql的编码采用GBK,mysql内的表中的数据还能显示正常为中文。并且查询出来的数据也能在页面上显示中文。
现在是登录之后记录日志的地方就成了乱码,表现为SQL语句含有中文的地方成了乱码(当插入不成功会打印SQL语句)
mysql原有驱动是在 /usr/local/mysql/mm.mysql.jdbc-1.2c下,这个驱动好像很早,我没有见过,接触java的时间还不到两年。
我把驱动换为mysql-connector-java-5.1.7-bin.jar 并放在WEB-INF/lib/ 下,启动后有乱码。 我把原先的驱动删除掉以后会报错(这两个地方的驱动缺一不可,但是我不太明白这种结构),我把 mysql-connector-java-5.1.7-bin.jar这个驱动也放在了/usr/local/mysql/下并且删除了原有驱动,可以正常启动,同样有乱码。
mysql的连接参数中加了这样的语句 useUnicode=true&characterEncoding=GBK-------------------------------------现在我不知道是什么问题引起了乱码,我怀疑是驱动问题,但是我本身对linux不是很熟悉,并且对以前的系统不是很了解。
请有过这方面经验的人给出出主意。PS:我的表达能力不是很好,也不知道表述清楚没有。

解决方案 »

  1.   

    “mysql内的表中的数据还能显示正常为中文。并且查询出来的数据也能在页面上显示中文。 
    现在是登录之后记录日志的地方就成了乱码”从这段话的意思是说,运行起来没有问题,只是看日志乱码???
    如果是我理解的这样,那么你设置一下你的linux系统的编码集应该就可以
      

  2.   

    是这样的,记录日志是要把一条记录用sql语句的形式插入到数据库里,但是因为出现了乱码而没有成功。
    因为程序在没有换mysql之前是好的,并且这之前我并没有改动过linux系统的编码。会是这样问题吗?
    用System.getProperties().put("file.encoding", "GBK");这样可以修改吧。
      

  3.   


    是用sql插入的时候sql语句成了乱码
      

  4.   

    是写的这条sql成了乱码还是这条sql插入到数据库的数据成了乱码.
    不明白你说的是哪里出来了问题.
      

  5.   


    比如说是这样,我写的代码是
    insert into log(script,type) values('用户XX登录成功','登录');
    一执行就成了乱码。数据因为成了乱码而造成没有成功存进数据库,如果是成功存进数据库了,数据库里应该也是乱码。
      

  6.   

    为了让页面对数据的操作正常。只是把/etc/mysql/my.cnf文件里mysqld的default charset 改成utf8 就ok了!你不妨试一试...
      

  7.   

    先确保过滤器写好了
    再修改MySQL的默认编码为utf-8
    还不行的话
    修改linux的编码格式utf-8
      

  8.   

    因为编码统一为GBK所以,mysql里的编码是不能换的。
      

  9.   


    我是一步一步的换过来,就是先换JDK,再换猫,最后MySQL,到MYSQL这一步才乱码的。猫的配置我都拷过来了。
    这也是我最想不通的地方,只换了数据库就不行了。
      

  10.   

    编码问题一直很烦人啊,所以常用utf8。
      

  11.   

    这个和linux无关的,mysql本身乱码问题比较麻烦 , 修改 my.ini文件 57  81 行 改底层编码为GBK
      

  12.   


    我不知道你是否在linux下开发过java Linux下不是用my.ini是my.cnf
      

  13.   

    和linux没有关系。问题出在tomcat上,tomcat默认的编码是ISO-8859-1,如果你不设置的话,你所有的项目都作这样的编码,对于gbk的文字就会是乱码。解决方法:
    可以在tomcat目录下的conf文件夹下的server.xml文件中修改tomcat编码为你想要的编码 如果还不能解决,再写一个过滤器:
    import javax.servlet.*;    
    import java.io.IOException;    
       
    /**   
    * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题   
    */   
    public class CharacterEncodingFilter    
    implements Filter    
    {   
        public void init(){}
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{    
     
              request.setCharacterEncoding("GBK"); 
              response.setCharacterEncoding("GBK"); 
              chain.doFilter(request, response);    
    }    
       
       public void destroy(){}    
    }   web.xml中的配置<filter>
    <filter-name>charset</filter-name>
    <filter-class>过滤器实现类的完全限定名</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>charset</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  14.   


    我想您没有仔细看我的贴子。记录日志那个地方的代码(中文部分)完全是写在代码里的。根本就不会用到tomcat。我用main执行也是一样的。
      

  15.   

    main方法乱码了? 换了MYSQL居然会出现这个?神奇了
      

  16.   

    楼主用的Mysql.去搜一下如何改变mysql乱码就可以了,前段时间遇到过。