关于S2SH+mysql中文乱码问题

关于S2SH+mysql中文乱码问题
    主要是mysql数据库乱码问题,关于网页中的乱码(JSP页面乱码,action乱码)都好解决,只要页面的编码统一就可以了。我比较喜欢用UTF-8编码,不是很喜欢GBK或GB2312编码。
      关于JSP页面及action只需添加一个EncodingFilter就可以了,代码如下:
 1 package  cn.zhang.myznt.filter;
 2
 3 import  java.io.IOException;
 4
 5 import  javax.servlet.Filter;
 6 import  javax.servlet.FilterChain;
 7 import  javax.servlet.FilterConfig;
 8 import  javax.servlet.ServletException;
 9 import  javax.servlet.ServletRequest;
10 import  javax.servlet.ServletResponse;
11
12 public   class  EncodingFilter  implements  Filter  {
13    private String charset = null;
14    public void destroy() {
15
16    }

17
18    public void doFilter(ServletRequest request, ServletResponse response,
19            FilterChain chain) throws IOException, ServletException {
20        request.setCharacterEncoding(this.charset);
21        chain.doFilter(request, response);
22
23    }

24
25    public void init(FilterConfig arg0) throws ServletException {
26        this.charset = arg0.getInitParameter("charset");
27    }

28
29}

30

在web.xml中注册这个Filter,注意他的位置必须放在需要调用action及jsp或其他页面声明之前
 1 < filter >
 2          < filter-name > encoding </ filter-name >
 3          < filter-class > cn.zhang.myznt.filter.EncodingFilter </ filter-class >
 4          < init-param >
 5              < param-name > charset </ param-name >
 6              < param-value > UTF-8 </ param-value >
 7          </ init-param >
 8      </ filter >
 9      < filter-mapping >
10          < filter-name > encoding </ filter-name >
11          < url-pattern > /* </ url-pattern >
12      </ filter-mapping >

同时在连接mysql数据库的时候也要改为jdbc:mysql://localhost:3306/mldn?useUnicode=true &amp;characterEncoding=utf-8 如果连接在java代码中使用,请使用&,如果是在xml中使用请写成 &amp;

    关于mysql的collation字符集和mysql的characterSet字符集问题,查了很多资料都说要设置成一样,我想那只是针对如果你选GBK作为数据库编码的时候所用,但如果选用UTF8作为数据库编码的时候就不一定正确了。
    今天根据网上的资料将所有的characterSet设置成utf8(可用mysql> SHOW VARIABLES LIKE 'character_set_%';查看),一直在测试乱码问题解决没有。在测试过程发现传递的中文都是正确的,可就是在MySQL Client中查看的是乱码,所以继续找方法解决,但其实这个时候你插进去的中文已经是正常的了,只是在MySQL Client中显示是乱码。那么为什么会这样?MySQL Client设置成UTF8的时候中文不能正常显示,此时我们应该将charact_set_client :设置成gbk,这样就可以正常显示中文了。
    可以在my.ini中

[mysql]

default-character-set=gbk


而下面的default-character-set=utf8,两个default-character-set的设置是不一样的。当然如果你选用gbk作为数据库编码,是需要设置成一样的。

你可能感兴趣的:(关于S2SH+mysql中文乱码问题)