相信使用数据库进行存储的大家都遇到过中文乱码问题,如何彻底解决?我百度了很多资料与博客,想把自己的经历总结起来给大家参考一下,接下来我先罗列一下大部分修改乱码问题的方法:

1.   修改MySQL数据库的整体编码

引用自:http://www.cnblogs.com/24la/p/update-mysql-default-character.html

查看方式数据库编码:

show variables like 'character%';

该图是复制的(我的已经改好了)

出现上图情况时,可以进行数据库配置文件my.ini 文件修改:

打开my.ini找到[client]添加一行

default-character-set=utf8

找到[mysqld]这行添加代码如下

character_set_server=utf8

init_connect='SET NAMES utf8'

要记住,一般该配置文件是拒绝访问的,更别提修改了,此时可以将该文件复制到桌面,修改为txt格式强行修改内容,然后改回ini文件格式并将之前的my.ini文件删除,然后将桌面上已经修改好的my.ini复制进去(这一系列操作都需要管理员权限才行)

这样我们再查看下数据库的编码(我们必须关闭MySQL服务和关闭MySQL现有会话,保证我们以新的字符编码打开了)

但此时我的乱码问题依然没有解决,于是我将目光转向了eclipse。

2.   修改eclipse的页面编码

在eclipse中的window—preferences—General—workspace—页面左下角中的Text file encoding 设置为utf-8,这样只能保证新建文件和打开文件时不会出现乱码。

3.   修改JDBC连接属性编码

有一次乱码问题是通过在jdbc连接属性中的url=jdbc:mysql://localhost:3306/contact_sys的最后加入?useUnicode=true&characterEncoding=utf-8,就像是在Get请求在url下加入一下参数一样,这样就确保了java与mysql进行连接时的编码统一,很遗憾,还是没解决我的问题。

4.   修改JSP页面编码和tomcat服务器编码

引用自:http://blog.csdn.net/lhfeng/article/details/6311787

里面的一句话成功的吸引了我的注意:Tomcat默认使用iso-8859-1进行提交的数据解码,而提交的数据是使用utf-8编码的,编解码对不上自然会出现乱码.解决办法就是指定解码方式。

于是我决定彻底解决问题:在tomcat/cof/server.xml配置文件中,修改其默认编码

找到如下代码:

<Connector port="8080"protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

在其中加入如下代码:

useBodyEncodingForURI="true" URIEncoding="UTF-8"

其实该方法的作用很局限:当你已经设置了request.setCharacterEncoding("UTF-8");时,所有的post请求都会按照UTF-8的编码来编解码,只有Get请求在处理时会按照Tomcat的默认编码来解码,因此这项措施是针对获取get请求参数数据中文乱码的问题方法。

5.   增加过滤器类

为了彻底杜绝所有请求与响应数据的编码不一致问题,第一个想到的解决方案应该就是添加过滤器了。

public classSetEncodingFilter implements Filter {

public voiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {

              request.setCharacterEncoding("UTF-8");

              response.setCharacterEncoding("UTF-8");

              chain.doFilter(request, response);

       }

}

我设置了拦截所有资源,即在项目的web.xml中进行如下配置:

<filter-mapping>

   <filter-name>SetEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

满心欢喜的以为应该解决问题了,结果空欢喜一场。

6.   修改fileupload获取带文件的表单数据编码

引用:http://blog.csdn.net/jingyuwang1/article/details/21829605

这个兄弟给了一个想法:既然前前后后所有的问题都设置好了,会不会是这里出了问题?

将 item.getString();改为item.getString('utf-8');

结果真的是这里的问题!终于解决了眼下的乱码问题。

7.   总结

MySQL写入的中文乱码很有可能是JSP页面提取数据时乱码或者数据库编码与写入数据的编码不一致导致的,其他的地方一般不会出错,向上面一步步设置应该可以杜绝几乎所有的乱码问题了吧。

这次解决乱码问题让我觉得处理问题时对整个流程的理解和掌握特别重要,这样你就可以一步步的检查,修改,对照,一定会把问题给找出来,并且会学到很多深层的知识,对后期解决新的问题提供了经验。

当然了,出现问题多上百度查一下,从不同的角度搜索,也是很重要的,很多问题大家都遇到过了,耐心找一找就会得到答案。

写入MySQL中文乱码问题的更多相关文章

  1. 总结--解决 mysql 中文乱码

    首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...

  2. php mysql 中文乱码解决方法

    本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...

  3. c#+mysql 中文乱码

    c#+mysql 中文乱码 遇到一个奇怪的问题,C#读取mysql中文正常,写入时发生乱码 网上查阅原因,发现如下信息 ---------------------------------------- ...

  4. Mysql中文乱码以及导出为sql语句和Excel问题解决

    Mysql中文乱码以及导出为sql语句和Excel问题解决 这几天基于Heritrix写了一个爬虫,用到mysql,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看.一.导出数据 ...

  5. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

  6. Servlet、MySQL中文乱码

    1.Servlet中文乱码: 在doPost或doGet方法里,加上以下两行即可: response.setContentType("text/html;charset=UTF-8" ...

  7. windows mysql 中文乱码和中文录入提示太大错误的解决方法

    今天操作mysql的时候很郁闷,因为修改默认字符集搞了半天,终于弄成了(关于如何把windows的默认字符集设置成功,可以参看另一篇博文,最终在mysql中输入show variables like ...

  8. MySQL编程(0) - Mysql中文乱码问题解决方案

    MySQL 5.6 for Windows 解压缩版配置安装: http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html MySQL ...

  9. MySQL及navicat for mysql中文乱码

    转载自:https://www.cnblogs.com/mufire/p/6697994.html 修改完之后记着重启mysql服务,在服务里边重启,即可生效! 全部使用utf8编码 MySQL中文乱 ...

随机推荐

  1. 物理机迁移至vmware

    使用用vmware vcenter converter standalone将物理机迁移到虚拟机. 6.2版本下载地址如下: https://www.filehorse.com/download-vm ...

  2. linux中文件颜色,蓝色,白色等各自代表的含义

    linux中文件颜色,蓝色,白色等各自代表的含义 绿色文件---------- 可执行文件,可执行的程序 红色文件-----------压缩文件或者包文件 蓝色文件----------目录 白色文件- ...

  3. 安装MYSQL8.0提示api-ms-win-crt-runtime-l1-1-0.dll 丢失

    Windows Server 2012 api-ms-win-crt-runtime-l1-1-0.dll 丢失 2017-11-06 11:11:37 Martin_Yelvin 阅读数 17015 ...

  4. 《Unity shader入门精要》复习<第13章 关于NDC坐标和深度/法线纹理>

    分为三个地方讲解. NDC(Normalize Device Coordinates)归一化的设备坐标 NDC坐标是世界空间坐标通过MVP变换之后再进行归一化得到的坐标.只需要再一步变换就能得到屏幕空 ...

  5. 七天接手react项目 —— 生命周期&受控和非受控组件&Dom 元素&Diffing 算法

    生命周期&受控和非受控组件&Dom 元素&Diffing 算法 生命周期 首先回忆一下 vue 中的生命周期: vue 对外提供了生命周期的钩子函数,允许我们在 vue 的各个 ...

  6. 开启路由器的TCP拦截

    TCP拦截即TCP intercept,大多数的路由器平台都引用了该功能,其主要作用就是防止SYN泛洪攻击.SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击 ...

  7. Spring Boot 中初始化资源的几种方式

    假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看.今天介绍几种在Spring Boot中进行资源初始化的方式,帮助大家解决和回 ...

  8. C++ struct结构体内存对齐

    •小试牛刀 我们自定义两个结构体 A 和 B: struct A { char c1; char c2; int i; double d; }; struct B { char c1; int i; ...

  9. 冒泡排序和鸡尾酒排序(code)

    昨天回顾了下冒泡排序和鸡尾酒排序,用面向对象的方式写了一下,并且优化了代码,记录一下~ 一.冒泡排序 # 冒泡排序 class BubbleSort(object): def __init__(sel ...

  10. 6月22日 Django中ORM的F查询和Q查询、事务、QuerySet方法大全

    一.F查询和Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实 ...