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

JavaEE应用中MySQL中文乱码完全解决方案

2011-05-30 15:12 253 查看
相信很多使用MySQL数据库做开发的朋友,都或多或少的遇到过中文乱码的问题。大象根据项目实践,在此将自己的成功经验总结拿出来和大家分享。
我使用的MySQL数据库版本是5.0.27,按以下几点处理,可以很好的解决中文乱码问题。
1、数据库安装
安装数据库时,有个服务器的字符集设置,这里不要使用默认的latin1字符集,而应该选择utf8字符集。在创建表的时候,还应该设定默认字符集编码为utf8。
2、数据库配置文件
假设你在数据库安装时,采用了默认的字符集设置,或是使用了gb2312、gbk等等,我们可以通过修改MySQL根目录下的my.ini文件来改变字符编码。
打开my.ini文件,修改下图中画红线的部分。请注意是utf8,而不是utf-8或UTF-8



第二个红线部分的设置很关键,它主要用来指定表字段的默认字符集为utf8。大象试过,在所有设置都相同的情况下,这里如果保留默认的latin1,当在应用中向数据库插入数据时,就会出现乱码。而改成utf8则不会。
3、数据库工具
我觉得工具的选择很重要,现在关于MySQL的工具也有很多。我也用过很多,在这里我向大家推荐Navicat Lite for MySQL工具,界面如下:



界面简洁,功能强大,特别是能很好的处理中文字符。相信大家都能很快上手。我目前使用的是8.1版。
4、Eclipse工作空间
如今使用Eclipse工具做Java开发的占绝大多数,那么为了避免中文乱码的发生,Eclipse的工作空间也应该设置成UTF-8编码。



5、页面字符编码
我们已经将数据库与开发工具都统一成UTF-8的字符编码,那么对于展示层的JSP,我们也应该进行相应的设置。
在JSP页面顶部设置编码格式
<%@pagecontentType="text/html;charset=UTF-8"%>
在head之间加入meta设置

<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
另外,大象建议表单提交采用post方式。
6、数据库连接
连接数据库的地址中我们也应该加入字符设置,请看下面蓝色的字符。
jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=UTF-8
7、容器配置文件
还有最重要的一个步骤不能忘记,就是要在web.xml中加入字符过滤器。
<!-- Filter定义 -->
<!-- Character Encoding filter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- Filter映射 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里用到的是Spring的编码过滤器,我们可以直接拿来用。不过请注意forceEncoding这个参数,把它设置为true表示不管请求中的编码是什么格式,都将强制采用encoding中设置的编码方式。另外对于响应也将按照encoding指定的编码进行设置。
通过以上几个步骤,应该可以完全解决使用MySQL数据库所带来的中文乱码问题。如果你按照这些设置做过后还是出现了乱码,请提出来,让我们一起来解决。
大象不建议大家为了实现中文问题而采取gb2312或gbk等编码方式,我们应该使用基于Unicode的编码。而UTF-8是目前互联网上使用最广泛的一种Unicode的实现方式,特别是目前JavaEE的企业级项目,都是基于互联网式的Web应用。所以我们应该使用这种统一的字符集编码方式。另外,对于SQLServer和Oracle数据库,不会出现像MySQL这样的乱码问题,但我们也应该坚持在开发过程中统一采用UTF-8的编码方式。希望此文能对大家有所帮助。
本文为菠萝大象原创,如要转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: