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的编码方式。希望此文能对大家有所帮助。
本文为菠萝大象原创,如要转载请注明出处。
我使用的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的编码方式。希望此文能对大家有所帮助。
本文为菠萝大象原创,如要转载请注明出处。
相关文章推荐
- JavaEE应用中MySQL中文乱码完全解决方案----转自:http://www.blogjava.net/bolo
- JavaEE应用中MySQL中文乱码完全解决方案
- JavaEE应用中MySQL中文乱码完全解决方案
- JavaEE应用中MySQL中文乱码完全解决方案
- 使用myeclipse插入数据到mysql 出现中文乱码|utf8乱码解决方案[适合tomcat部署的jsp应用]
- Mysql中文乱码问题完美解决方案
- Mysql 中文乱码问题完美解决方案
- mysql-5.6.20-winx64免安装版数据库中文乱码终极解决方案
- Mysql中文乱码问题完美解决方案
- 2015.10.22小结Mysql中文乱码问题完美解决方案(包括建库、导入数据、网页)
- PHP与MYSQL搭配出现中文乱码的“终极”解决方案
- java;jsp;tomcat;mysql;hibernate;编码中文乱码全面解决方案
- mysql CAPI 接口 读取中文乱码的解决方案
- MAC上mysql中文乱码解决方案(亲测可用)
- java;jsp;tomcat;mysql;hibernate;编码中文乱码全面解决方案
- MySql中文乱码问题以及Incorrect string value: '\xF0\x9F...' 问题的解决方案
- mysql处理Latin 中文繁体字乱码解决方案
- mysql 插入中文乱码解决方案
- Mysql中文乱码问题完美解决方案
- Java_JavaEE_SSH_hibernate向mysql插入数据引起中文乱码问题