您的位置:首页 > 编程语言 > Java开发

MYECLIPSE MYSQL 中文乱码问题

2010-04-01 16:20 330 查看
解决Mysql5.0数据库中文乱码三个步骤
2009年6月26日星期五
在系统中用到了mysql数据库,开发语言java。在系统中遇到了中文乱码问题。mysql把它的默认编码变成了latinl字符集了。现在让我们看看自己的数据库的各个部分的编码:
进入命令行;SHOW VARIABLES LIKE 'character_set_%';可以查看数据库编码。

这是我改后的数据库编码,没改的里面有部分是latin1的字符编码。如果没有改变的话它会是latinl的而不是utf8的。这是为什么呢?
(1)、首先把你的jsp页面编码改成UTF-8的。
A、<%@ page language="java" import="java.util.*" pageEncoding=”UTF-8"%>
B、在Hibernate.cfg.xml中的连接字符串中加上 【?useUnicode=true&characterEncoding=utf8】
例如:jdbc:mysql://localhost:3306/online?useUnicode=true&characterEncoding=utf8
C、打开mysql的安装目录,我的在:C:/Program Files/MySQL/MySQL Server 5.0打开:my.ini文件修改里面的默认编码:default-character-set=latinl 为default-character-set=gbk,一共有两处。必须重新启动mysql。
注意:如果之前用latin1把数据库导出为SQL语句的话,需要的那个mysql.sql文件中将所有的的latin1改为数据库默认的编码,也就是我们刚改的gbk.
(3)、然后加上过滤器,过滤器的代码如下:
package com.online.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;

public void init(FilterConfig filterConfig) throws ServletException
{

this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
{
this.ignore = true;
}
else if (value.equalsIgnoreCase("true"))
{
this.ignore = true;
}
else if (value.equalsIgnoreCase("yes"))
{
this.ignore = true;
}
else
{
this.ignore = false;
}
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{

if (ignore || (request.getCharacterEncoding() == null))
{
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}

public void destroy()
{

this.encoding = null;
this.filterConfig = null;

}
protected String selectEncoding(ServletRequest request)
{
return (this.encoding);
}

}
(3)、在web.xml中的配置:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.online.filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
配置好以后别的什么处理乱码的工作都不用做了,个人认为是万能的。现在一切搞定。再不会有中文乱码了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: