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>
配置好以后别的什么处理乱码的工作都不用做了,个人认为是万能的。现在一切搞定。再不会有中文乱码了。
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>
配置好以后别的什么处理乱码的工作都不用做了,个人认为是万能的。现在一切搞定。再不会有中文乱码了。
相关文章推荐
- MyEclipse2014与MySQL中文乱码问题
- MyEclipse+MySql插入中文乱码问题解决
- myeclipse与mysql之间的中文乱码问题
- MyEclipse+MySql插入中文乱码问题解决
- MyEclipse+MySql插入中文乱码问题解决
- Ubuntu15.10使用mysql 5.6.28中文乱码问题解决
- 解决springmvc+mybatis+mysql中文乱码问题【转】
- linux系统下mysql快速安装使用、远程访问及中文乱码问题解决
- python查询mysql中文乱码问题
- Mysql导入大文件及导入中文乱码问题解决
- 解决mysql在Windows终端显示中文乱码问题
- mysql 基本使用 : 中文乱码问题
- MySQL中文乱码问题的解决 (2009-01-02 20:16:25)
- Mysql中文乱码问题分析
- Dos命令下操作MySql解决中文乱码问题
- 解决Xshell等Linux终端连接MySQL中文乱码问题
- 【ITOO技术篇】——MySQL插入中文数据,存入数据库乱码的问题
- MySQL 插入数据时,中文乱码问题的解决
- Mysql中文乱码以及导出为sql语句和Excel问题解决
- mysql字符集修改方法&中文乱码问题