Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 425|回复: 0

[jsp学习]MySQL中文乱码完全解决方案

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-16 01:28:41 | 显示全部楼层 |阅读模式
    相信很多使用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页面顶部设置编码格式


          <%@ page contentType="text/HTML;charset=UTF-8" %>
      在head之间加入meta设置
      

          <
      meta
      http-equiv
      =
      "Content-Type"
      content
      =
      "text/html;charset=utf-8"
      />
      另外,大象建议表单提交采用post方式。
       
        6、数据库连接
        连接数据库的地址中我们也应该加入字符设置,请看下面蓝色的字符。


          jdbc:mysql://localhost:3306/mysql?useUnicode=true&amp;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的编码方式。希望此文能对大家有所帮助。
         本文为菠萝大象原创,如要转载请注明出处。



      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-16 03:05 , Processed in 0.408142 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表