论坛首页 综合技术论坛

彻底解决MySql在UTF8字符集下乱码问题

浏览 18684 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-13  
为了顺利的开发一个多语言的国际化J2EE程序,需要修改数据库字符集,我的做法如下:

安装 MySq时选择字符集为UTF-8

修改MySql安装目录下的my.ini中配置的默认编码:
该文件中有两处这样的配置:default-character-set=latin1
将这两处改成:default-character-set=utf8

新建数据库需指定字符集:
UTF8: CREATE DATABASE mmtye DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

在命令行查看字符集编码:show variables like '%char%'; 会看到如下信息:
character_set_client     | utf8
character_set_connection | utf8
character_set_database   | utf8
character_set_filesystem | binary
character_set_results    | utf8
character_set_server     | utf8
character_set_system     | utf8
character_sets_dir       | D:\MySQL\share\charsets\

以上内容在重启MySql后也一直有效,无需每次启动数据库都要指定。

A、为了在命令行下能正确查看中文,命令行下执行:
set character_set_results=gbk;

B、若需要在windows命令行执行insert、update,则执行:
set character_set_client=gbk;
A、B 两个命令重启数据库前有效,重启后就失效了。
   发表时间:2010-11-15  
windows7下这个做法是正常的,xp下没有进行测试。
0 请登录后投票
   发表时间:2010-11-15  
补充一下,新建表的时候要加上字符集,例如:
create table dloginmsg(
......
.....
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
0 请登录后投票
   发表时间:2010-11-19  
这个只是解决了mysql的编码,但是没有解决j2ee的编码问题。
解决j2ee编码问题步骤:
1.设置mysql的字符编码为utf-8,可以在安装的时候设置,也可以用楼主的方法设置
2.设置容器的编码:比如tomcat,打开server.xml,找到8080 加速URIEncoding="utf-8"
3.设置url的字符编码。应为url传递参数默认都是iso8859-1,所以需要将头信息改成utf-8,可以自己写个过滤器修改头信息,也可以用spring现有的过滤器。
以上3点完成,这才叫彻底解决编码问题了
0 请登录后投票
   发表时间:2010-11-19   最后修改:2010-11-19
如果SSH2框架的话,还需要在Action中加上序列化serialVersionUID,在数据库连接的地方我常常也会加一个characterEncoding=utf-8
0 请登录后投票
   发表时间:2010-11-19  
白糖_ 写道
如果SSH2框架的话,还需要在Action中加上序列化serialVersionUID,在数据库连接的地方我常常也会加一个characterEncoding=utf-8

请教:在action中加入serialVersionUID跟编码有关系吗?谢谢
0 请登录后投票
   发表时间:2010-11-19  
设置成UTF-8是好,可是,对某个字段按照中文来排序,你就没办法了……
0 请登录后投票
   发表时间:2010-11-21  
xiaoxin5230 写道
这个只是解决了mysql的编码,但是没有解决j2ee的编码问题。
解决j2ee编码问题步骤:
1.设置mysql的字符编码为utf-8,可以在安装的时候设置,也可以用楼主的方法设置
2.设置容器的编码:比如tomcat,打开server.xml,找到8080 加速URIEncoding="utf-8"
3.设置url的字符编码。应为url传递参数默认都是iso8859-1,所以需要将头信息改成utf-8,可以自己写个过滤器修改头信息,也可以用spring现有的过滤器。
以上3点完成,这才叫彻底解决编码问题了


jsp页面的头要不要设置呢?
数据库的驱动呢?
0 请登录后投票
   发表时间:2010-11-21   最后修改:2010-11-21
所谓的彻底解决难道一竿子全部设置成UTF8啊。 看来charset要彻底的理解还是困难。

如果彻底的理解字符集合, 完全可以做到 数据库/JSP/HTML/driver全部都是不一致的编码。 能做到这些完全是因为JAVA内部的处理是UNICODE。 也就是每个经过JAVA处理的东西, 只要告诉JAVA处理目标的编码即可。 另外, 也就是, 要在客户端能正确看到, 也要告诉JAVA输出的目标的编码是什么。

我举个例子
1. 读取GBK的数据库的数据
2. 读取gb2312的文件
3. 读取UTF8编码的模板文件
在经过JAVA处理后, 我们可以统一输出到一个gb1830的HTML文档里去。
当然, 这样的处理99%的字符肯定是对的。 我也遇到个别字符的特殊情况。 主要是UTF8/GBK之间存在一些字符映射不存在。 



0 请登录后投票
   发表时间:2010-11-24  
不错。我正发愁命令行行的乱码问题!希望成功!
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics