我的问题是这样的现在有一个系统(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:我的表达能力不是很好,也不知道表述清楚没有。
现在我需要把这个系统升级一下并加入新的模块,把原来的用的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:我的表达能力不是很好,也不知道表述清楚没有。
现在是登录之后记录日志的地方就成了乱码”从这段话的意思是说,运行起来没有问题,只是看日志乱码???
如果是我理解的这样,那么你设置一下你的linux系统的编码集应该就可以
因为程序在没有换mysql之前是好的,并且这之前我并没有改动过linux系统的编码。会是这样问题吗?
用System.getProperties().put("file.encoding", "GBK");这样可以修改吧。
是用sql插入的时候sql语句成了乱码
不明白你说的是哪里出来了问题.
比如说是这样,我写的代码是
insert into log(script,type) values('用户XX登录成功','登录');
一执行就成了乱码。数据因为成了乱码而造成没有成功存进数据库,如果是成功存进数据库了,数据库里应该也是乱码。
再修改MySQL的默认编码为utf-8
还不行的话
修改linux的编码格式utf-8
我是一步一步的换过来,就是先换JDK,再换猫,最后MySQL,到MYSQL这一步才乱码的。猫的配置我都拷过来了。
这也是我最想不通的地方,只换了数据库就不行了。
我不知道你是否在linux下开发过java Linux下不是用my.ini是my.cnf
可以在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>
我想您没有仔细看我的贴子。记录日志那个地方的代码(中文部分)完全是写在代码里的。根本就不会用到tomcat。我用main执行也是一样的。