-
MySQL灵异乱码问题20
问题描述:
在使用MySQL时,偶尔会发生乱码,排查不到问题,可能是MySQL的bug。
问题表现:部分中文字符会显示乱码,但使用相同程序、保存相同中文字符的其他绝大多数地方都是正常的。(不是显示为乱码,数据库记录中就是乱码,即保存为乱码)
上图中“细调”的调字为乱码;
上图中“维修”的维字为乱码;
上图中“单个”的个字为乱码;
环境与设置描述:
MySQL版本:mysql-noinstall-5.0.15-win32
应用服务器:tomcat-6.0.18
(注意,绝大部分数据是正常的,并且完全相同的字符串,只有极少个是乱码,所以应该不是设置存在问题。另外,该问题还不容易重现,没办法定位在什么情况下会出现乱码)
1. 所有jsp页面都有utf-8头设置
<%@ page contentType="text/html; charset=UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Language" content="UTF-8" /> ... </head>
2. 创建数据库时使用了default character set utf8
3. 数据库数据库连接都有设置字符集
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
4. 所有的动态请求都会被Spring的CharacterEncodingFilter过滤
<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> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
已排查过的内容:
已跟踪出现乱码的数据记录,从该数据记录创建开始到今天的所有数据操作(从mysql-bin文件中导出的数据库操作记录),都没有乱码迹象,即每一条与该数据相关的操作语句都没有出现乱码!
问题补充:<div class="quote_title">robertliudeqiang 写道</div><div class="quote_div">手动插入“细调”,“维修”可以吗? <br /> <br />另外,查看是否jdbc驱动有问题,换个新版的试试。</div> <br />绝对可以,所有中文都是正常的,包括“细调”和“维修”,只是在极少数“灵异”情况下才是乱码。
问题补充:<div class="quote_title">honglove 写道</div><div class="quote_div">呵呵!在myii这个文件中把编码集设置成utf-8</div> <br />my.ini?能说说原因么,或者解决方案的出处(网址也可以)。
问题补充:对于我对问题排查的步骤,详见Google Doc:<a href="http://docs.google.com/Doc?docid=0AVLJXkmlCn_hZGoyeDNiY18xMDFmMnBjOTdmZA&hl=en" target="_blank">http://docs.google.com/Doc?docid=0AVLJXkmlCn_hZGoyeDNiY18xMDFmMnBjOTdmZA&hl=en</a> <br /> <br />我相信也有人遇到过我同样的问题,希望遇到同样问题的同学也出来讲讲,即使没有找到答案 <img src="/images/smiles/icon_smile.gif"/>
问题补充:<div class="quote_title">honglove 写道</div><div class="quote_div"> 乱码问题就是因为编码集不同意呀!你可以看看这个<a href="http://kongzimengsheng1.iteye.com/blog/577426" target="_blank">http://kongzimengsheng1.iteye.com/blog/577426</a></div> <br /><img src="/images/smiles/icon_idea.gif"/> <br />安装介绍的设置C:\Windows\my.ini后,确实所有的编码集都是utf-8了,但是否可以解决我这里遇到的偶尔才出现乱码的问题,还需要系统运行几天观察以后再下定论,因为该设置是解决所有中文乱码问题,而我这里是同样的字符串只有极少数情况下出现乱码。观察约一周后没有再次出现乱码问题就关闭问题。 <br /> <br />另外,to robertliudeqiang,数据库驱动都是mysql-connector-java-5.1.6.jar(应用里使用的驱动,与应用服务器数据源使用的驱动都是) <br />
问题补充:谢谢各位的关注! <br /> <br /><strong>rox</strong>的方案我没有尝试,因为没有证据证明使用InnoDB会导致我这里遇到的灵异乱码,而且绝大多数情况下没有乱码; <br /> <br /><strong>to lygle</strong>:可以确定dao保存数据前不是乱码(因为跟踪到mysql的操作日志里没有乱码<a href="http://docs.google.com/Doc?docid=0AVLJXkmlCn_hZGoyeDNiY18xMDFmMnBjOTdmZA&hl=en" target="_blank">http://docs.google.com/Doc?docid=0AVLJXkmlCn_hZGoyeDNiY18xMDFmMnBjOTdmZA&hl=en</a>),但存到数据库里的却是乱码。 <br /> <br /><div class="quote_title">liweixw 写道</div><div class="quote_div">可能是Get方式提交的导致的!! <br />Spring的CharacterEncodingFilter过滤过滤器我不知道他是怎么实现的。。 <br />你修改下 <br />tomcat 容器在 <br />server.xml 在http协议加入这句代码 <br /><Connector port="8080" protocol="HTTP/1.1" <br /> connectionTimeout="20000" <br /> redirectPort="8443" <span style="color: red">URLEncoding="UTF-8"</span>/> <br /> <br />这样试试 看还乱码就M我。</div> <br /><strong>to liweixw</strong> <br />是UR<span style="color: red">I</span>Encoding="UTF-8"。 <br />首先,tomcat的server.xml里是配置了这个的; <br />其次,如果没有配置,使用get提交的将必然全是乱码,不可能只有中间一个字是乱码; <br />最后,程序中没有采用get方式提交过任何内容。 <br /> <br />另外,我们的所有动态请求都是通过.do进入的,没有其他入口,所有jsp被屏蔽,所以不会出现不被Spring过滤器过滤的情况;假若没被过滤,则不会出现中间一个字乱码的情况,mysql日志(mysqlbinlog)肯定能查到乱码记录。
问题补充:<div class="quote_title">honglove 写道</div><div class="quote_div"> 乱码问题就是因为编码集不同意呀!你可以看看这个<a href="http://kongzimengsheng1.iteye.com/blog/577426" target="_blank">http://kongzimengsheng1.iteye.com/blog/577426</a></div> <br />按这个设置数据库所有字符集为UTF-8后,依然出现乱码。。。 <br />更改配置后,由测试人员创建自动化脚本测试,约5000个数据操作(与乱码自动相关的操作)后,出现乱码: <br /><img src="http://dl.iteye.com/upload/attachment/222437/5d6d0ca2-c717-31e0-b981-25777b87a84f.bmp" /> <br /> <br /> <br /><div class="quote_title">skzr.org 写道</div><div class="quote_div"> <br />80%的可能只是一个Bug! <br /> <br />我的意见和建议是把此故障文档翻译为English然后提交Bug! <br /></div> <br />很好的建议!这里所有提出解决方案的人很多没看清、理解问题就开始提方案来,估计就您看的最仔细了。
问题补充:<div class="quote_title">iablee 写道</div><div class="quote_div">的确啊,我们公司也遇到过,但我忘记怎么改了,现在也不确定改好了, <br />最怪异的就是双数的中文可以、奇数个中文就有问题。 <br /> <br />我记得我当初提出的解决办法是: <br />tomcat配置URIEnocding,这个应该设置了, <br />my.ini设置utf8,这个应该设置了, <br />页面与后台的request设置字符为utf-8,这个也应该设置了。 <br />我想我给同事最关键的建议就是全部放在表单里面,使用post形式提交表单。隐约觉得这个好像可以,不太记得了。 <br />如果是ajax的话可以使用javascriptde 一个函数encodeURI(url); <br /> <br /></div> <br />终于有遇到过同样问题的人站出来了,激动! <br /> <br />1、2、3都设置了,4和5在这个问题中没有意义,因为出现乱码的字段不是界面传递过来的,是后台赋值的。其实所有的request都会被Spring的filter过滤为utf-8编码。 <br /> <br />最近换了mysql的最新版本(mysql-noinstall-5.1.45)在测试,驱动用的也是最新版本(5.1.12),目前测试数据约一万条,还没有出现乱码。打算这两天放到正式服务器上运行,反正升级数据库版本是不会有错的 ;)2010年3月15日 19:54
26个答案 按时间排序 按投票排序
-
呵呵,恭喜恭喜。升级数据库当然没有错。
不过我升级一个版本时一般考虑以下情况:
以前写的旧函数是否还可以。与其他组件的版本是否兼容。
不知道你以前用的是mysql几,升级为mysql5应该是很正确的啦。mysql的这个版本挺稳定挺好的。2010年3月29日 17:33
-
的确啊,我们公司也遇到过,但我忘记怎么改了,现在也不确定改好了,
最怪异的就是双数的中文可以、奇数个中文就有问题。
我记得我当初提出的解决办法是:
tomcat配置URIEnocding,这个应该设置了,
my.ini设置utf8,这个应该设置了,
页面与后台的request设置字符为utf-8,这个也应该设置了。
我想我给同事最关键的建议就是全部放在表单里面,使用post形式提交表单。隐约觉得这个好像可以,不太记得了。
如果是ajax的话可以使用javascriptde 一个函数encodeURI(url);
2010年3月26日 14:52
-
5.0.15啊,换个版本试看看吧。
从4.1开始用,没有发现过这样现象。字符集使用GBK就够用,不一定非得utf-8
我一直用gbk。
建了一个库,用5.0.18插入你说的那几个字,没有发现乱码现象。2010年3月25日 21:06
-
呵呵,老实说我和你一样的困惑,都是题问题后发现绝大多数的回答都未理解提问的意图,虽然用加粗和红色表明了重点依然有绝大多数的回答就是和google search出来的一样。。。
此现象貌似比较普遍2010年3月22日 19:17
-
大胆猜测一下,这个程序的jsp页面你原来用的不是utf8吧。是后来改的吧。。把你页面上出乱码的地方的中文都删了(一定要删干净啊),重新写一遍(可千万不要复制),应该就可以了。
2010年3月18日 14:54
-
我的意见是检查一下数据表的字符集。 数据表的字符集有时跟数据库的字符集是不统一的。特别是数据表建表语句是自动生成的。
有过一次经验就是数据表字符集不是utf-8导致字符乱码,也是几个字符,其他的好的。
所以用desc 查一下表属性比较好。2010年3月18日 09:48
-
我也遇到过类似问题,所有环境、配置都设为utf-8,但还是乱码。
好像不是数据库的问题,是网页上的数据传递过来时,接收的时候变成的乱码,所以保存也成了乱码。
后来用new String(request.getParameter("XXX").getBytes("iso-8859-1"),"UTF-8");
解决的。(我是写一个小方法,每次调一下,主要就是这句代码转化了一下)2010年3月18日 09:07
-
你页面操作保存的时候乱码?
还有你配置spring过滤器 只过滤了*.do的请求。
你们这个项目是不是如果有非*.do的提交。那么说服务器编码就是tomcat的容器的编码,默认是ISO8859-1。 加上我上面写的代码如果解决了。 如果不解在我们在一起探讨下!! 谢谢!2010年3月17日 15:35
-
可能是Get方式提交的导致的!!
Spring的CharacterEncodingFilter过滤过滤器我不知道他是怎么实现的。。
你修改下
tomcat 容器在
server.xml 在http协议加入这句代码
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URLEncoding="UTF-8"/>
这样试试 看还乱码就M我。2010年3月17日 15:23
-
使用mysql这么久,基本上没有出现这么奇怪的问题。
一、如果不是真得需要某些特性,使用MyISAM引擎试试。
二、导出语句,可以试试加入--opt 和 --compress 两个参数。2010年3月16日 22:40
-
乱码问题就是因为编码集不同意呀!你可以看看这个http://kongzimengsheng1.iteye.com/blog/577426
2010年3月16日 07:49
相关推荐
MySQL 中文乱码问题解决方法 MySQL 是一个功能强大且广泛应用的关系型数据库管理系统,但是,在使用 MySQL 时,用户经常会遇到中文乱码问题。今天,我们将讨论在 MySQL 中的中文乱码问题,并提供解决方法。 MySQL...
MySQL中的汉字乱码问题是一个常见的困扰许多开发人员和数据库管理员的问题。这主要涉及到字符编码设置不正确,导致在存储或显示汉字时出现乱码。在MySQL中,字符集是用来定义如何存储和处理字符的规则,它包括服务器...
使用 docker 启动 mysql 容器可能会出现中文乱码的情况,这里记录如何制作支持中文的 mysql 镜像 docker版本:18.06 mysql 版本:5.7 1. 创建 my.cnf 文件 [client] default-character-set=utf8 [mysql] default-...
### Linux下MySQL解决乱码问题 #### 背景与问题描述 在使用Linux系统时,部分用户可能会遇到MySQL数据库无法正确显示或录入中文字符的问题,即所谓的“乱码”现象。这种问题不仅影响数据的准确性和完整性,还可能...
### MySQL中文乱码问题解决方案 在使用MySQL的过程中,中文乱码问题是常见的问题之一,尤其是在数据库初始设置不当时,更容易出现此类问题。本文将详细介绍如何彻底解决MySQL中的中文乱码问题。 #### 一、理解中文...
### Linux MySQL中文乱码问题解决 #### 背景与问题描述 在使用Linux系统部署MySQL数据库时,可能会遇到中文字符显示为乱码的问题。这一现象通常发生在对含有中文字符的数据进行读取或写入操作时。中文乱码不仅影响...
MySQL数据库在处理中文字符时,有时会出现乱码问题,这主要与字符集设置不正确有关。本文将深入探讨MySQL中文乱码问题的原因、解决方法,以及如何在创建数据库和表时避免这类问题。 首先,我们要了解字符集的概念。...
### 彻底解决C# ASP.NET 连接MySQL乱码问题 在开发过程中,尤其是在处理中文数据时,经常遇到的一个问题是数据库连接时出现乱码。本文将详细介绍如何彻底解决使用C# ASP.NET 应用程序连接 MySQL 数据库时出现的乱码...
Java 中 MySQL 中文乱码问题解决方案 Java 中 MySQL 中文乱码问题是数据库开发中常见的问题之一,解决这个问题需要对数据库、JSP 和 Tomcat 进行相应的设置。下面我们将详细介绍解决该问题的方案。 数据库编码修改...
本文将深入探讨“hibernate+mysql乱码问题”的原因、解决方案以及如何预防这类问题。 首先,我们需要了解乱码问题的根源。在数据库层面,MySQL的编码格式对数据存储和检索至关重要。如果数据库、表或列的字符集不...
在macOS系统中,使用MySQL数据库时,可能会遇到中文乱码的问题,这通常是由于字符集设置不正确导致的。本文将详细介绍如何解决macOS系统下MySQL中文乱码的问题,通过修改配置文件my.cnf来调整MySQL的字符集,确保...
在使用Java应用程序与MySQL数据库交互的过程中,常常会遇到一个令人头疼的问题:中文字符在存储到数据库时出现乱码现象。这种现象通常发生在使用JDBC(Java Database Connectivity)连接数据库,并进行数据插入操作...
Ubuntu MySQL 中文乱码问题解决方案 在 Ubuntu 系统中,MySQL 数据库中文乱码问题是一个常见的问题。乱码问题可能是由于 MySQL 数据库的字符编码设置不正确所致。解决这个问题需要对 MySQL 数据库的字符编码进行...
### MySQL乱码问题解决方案 在处理数据库操作时,字符集编码问题经常会导致数据展示或存储过程中出现乱码现象。MySQL作为广泛使用的开源关系型数据库管理系统之一,在实际应用中也难免会遇到字符集不匹配导致的数据...
### MySQL中文乱码问题完美解决方案 #### 背景与问题描述 在处理MySQL数据库时,中文乱码问题是一个常见的技术挑战。这类问题通常源于字符集设置不一致或配置不当,尤其是在不同系统环境(如开发环境与生产环境)...
本问题聚焦于ASP(Active Server Pages)与MySQL数据库进行数据操作时遇到的乱码问题。这通常涉及到字符编码不一致、设置不当或者传输过程中的编码转换错误。下面我们将深入探讨这个主题,以及如何解决这类问题。 ...
### MySQL 插入中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在使用 MySQL 数据库处理中文数据时,经常会遇到一个让人头疼的问题——中文乱码。中文乱码不仅影响用户体验,还可能导致数据丢失或者错误...