写入MySQL中文乱码问题

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

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页面提取数据时乱码或者数据库编码与写入数据的编码不一致导致的,其他的地方一般不会出错,向上面一步步设置应该可以杜绝几乎所有的乱码问题了吧。

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

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

原文地址:https://www.cnblogs.com/yijiahao/p/11707155.html

时间: 2024-10-31 13:20:32

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

Java 写入mysql 中文乱码问题(解决)

创建数据库: CREATE   DATABASE   `Db`                CHARACTER   SET   'utf8 '                COLLATE   'utf8_general_ci '; 2 建表的时候: CREATE   TABLE   `TableA`   (                                     `ID`   varchar(40)   NOT   NULL   default   ' ',         

c#写入Mysql中文显示乱码 解决方法 z

mysql字符集utf8,c#写入中文后,全部显示成?,一个汉字对应一个? 解决方法:在数据库连接字符串中增加字符集的说明,Charset=utf8,如 MySQLConnection con = new MySQLConnection("server=127.0.0.1;uid=root;pwd=;database=test;Charset=utf8"); 搞定 c#写入Mysql中文显示乱码 解决方法 z,布布扣,bubuko.com

总结--解决 mysql 中文乱码

首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码: create database testdb default charset utf8 2.修改库的编码: ALTER DATABASE `testtable` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 3.修改表的编码: ALTER TABLE `

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

这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文出现乱码 最初在mybatis配置如下 <select id="queryContentById" resultType = "java.lang.String" parameterType="String" >     select t

MySql中文乱码问题(3)

MySql的客户端是在dos界面上,然而dos界面默认的字符集编码方式是:GBK (1).MySql字符转换原理图 (2).查看服务器的所有编码方式: >show variables like 'character%'; (3).通过以上观看,如果不想出现中文乱码情况,需要指定客户端的编码方式.连接器的编码方式.返回数据的编码方式: #设置客户端为GBK: >set character_set_client=gbk; #设置连接器使用UTF8 >set character_set_con

Mysql中文乱码问题完美解决方案

MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如php)的连线语系设定问题强烈建议使用utf8!!!!utf8可以兼容世界上所有字符!!!!一.避免创建数据库及表出现中文乱码和查看编码方法1.创建数据库的时候:CREATE DATABASE `test`CHARACTER SET 'utf8'COLLATE 'utf8_general_ci';2.建表

关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)(转)

这篇文章给大家介绍关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)的相关资料,还给大家收集些关于MySQL会出现中文乱码原因常见的几点,小伙伴快来看看吧 最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅. 首先: 用show variables like "%colla%":show varables like "%char%":这两条命令查看数据库与服务端的字符集

sae python中Mysql中文乱码的解决

一开始我用的是: db=MySQLdb.connect(db=sae.const.MYSQL_DB,user=sae.const.MYSQL_USER,passwd=sae.const.MYSQL_PASS,host=sae.const.MYSQL_HOST,port=int(sae.const.MYSQL_PORT)) 数据库编码与python代码的编码都已设为utf8,在PHPMyAdmin中添加中文记录,在网页查询显示中却显示乱码,我在网上各种搜索都找不到解决方法.最后终于发现在连接数据库

Servlet、MySQL中文乱码

1.Servlet中文乱码: 在doPost或doGet方法里,加上以下两行即可: response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); 2.MySQL中文乱码: Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test? useUn