具体情况:
mysql建数据库db1时,采用了默认的字符集latin1,然后插入了一些中文字符。
现在用ssh框架,从数据库里查出来的中文字符就是乱码。求解决方法:
1,在不改动默认字符集latin1的情况下,解决乱码。
2,或者,把latin1的改成utf8,但要求字符集改变后,里面的中文字符,不变成乱码
mysql建数据库db1时,采用了默认的字符集latin1,然后插入了一些中文字符。
现在用ssh框架,从数据库里查出来的中文字符就是乱码。求解决方法:
1,在不改动默认字符集latin1的情况下,解决乱码。
2,或者,把latin1的改成utf8,但要求字符集改变后,里面的中文字符,不变成乱码
改成utf8 ,你可以把原来的数据备份一下,改成utf8后,再导入
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_server=utf8;
用这种方式,只是暂时改变mysql的编码,
下次启动又变成latin1了
ID varchar(32) NOT NULL,
NAME varcar(100)
ENGINE=InnoDB DEFAULT CHARSET=utf8 已经建好的话
加一个过滤器试下吧
1.建一个类:
package org.jb.common.filter; import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException; public class SetCharacterEncodingFilter implements Filter { protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable; public SetCharacterEncodingFilter() {
this.encodingName = "GBK";
this.enable = false;
} public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
} public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("GBK");
chain.doFilter(request, response);
} public void destroy() {
}
} 2.web.xml配置加
<filter>
<filter-name>encodefilter</filter-name>
<filter-class>org.jb.common.filter.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodefilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2,使用字符集转换工具把.SQL文件转换成UTF8字符集.
3,用UTF8字符集重新建立数据库.
4,把转换好的.SQL文件IMPORT到新数据库里面.
1.在配置文件中,如 c:\winnt\my.ini 中的 [mysqld] 里添加一行:
default-character-set=utf8
2.连接字符串里,的编码。
String strURL = "jdbc:mysql://localhost:3306/hikdb?useUnicode=true&characterEncoding=utf-8";
3.数据库表编码。
例如:
CREATE TABLE `hikdb`.`tb_region` (
`nLsh` int(10) unsigned NOT NULL auto_increment,
`ParentID` int(10) unsigned NOT NULL,
`Name` varchar(64) NOT NULL,
`OrderTime` datetime NOT NULL,
PRIMARY KEY (`nLsh`)
) ENGINE = innodb DEFAULT CHARACTER SET utf8;试下这三种方式,不行,就不知道了。
是否是 乱码,如果是 应该是mysql 的字符集问题。
可以在见表的最后加上ENGINE=InnoDB DEFAULT CHARSET=latin1 试试看看,
2,上一步如果查出不是乱码,你插入一条数据到你的目标表中(如果数据重要,请先做好备份),
查看这条数据是否是乱码。如果是同上方法在最后加上ENGINE=InnoDB DEFAULT CHARSET=latin1
试试看看,
3,如果不是乱码,那么基本排除是数据库出现乱码导致数据问题。4,写一个java 测试类。连接数据库。提取数据查看是否是乱码。如果还是乱码,可以判断了还是
数据库的问题。如果不是。在连接到一个web。查看是不是乱码。是乱码,在用 过滤器 来处理。
祝楼主成功 !!!!!!!!!!!