mysql乱码问题分析与解决方法

 更新时间:2012年11月29日 11:18:15   作者:  
开发过程中总避免不了遇到恶心的乱码,或者由乱码引发的一系列问题,这里简要介绍一下自己遇到的乱码问题和解决问题的过程中的想法以及大致的操作
开发过程中总避免不了遇到恶心的乱码,或者由乱码引发的一系列问题。出现乱码是字符集的原因一般而言和逻辑没有太大关系,也就是说整个系统大的方向没有问题,小的地方出现了漏洞,进而导致程序不能正常运行,所以说出现乱码是一件令人非常很恶心的事情。这里简要介绍一下自己遇到的乱码问题和解决问题的过程中的想法以及大致的操作,我们要学会的是如何分析问题进而解决问题,而不仅仅是照着网上的操作去一次次的解决眼前的困难,“鱼”与“渔”的区别就在于此。

交代背景
要实现的功能很简单,用dom4J读取XML文件然后借助Spring以及Hibernate将数据写入到MySql数据库(多表)中,当然整个过程是由Spring控制事务一次性完成,有异常进行回滚。
现象:在往数据库里写数据写到一半的时候报错,大致的错误信息是:记录不是唯一。
分析和操作:
检查了一遍自己的代码,用Spring当中的HibernateTemplete保存数据,应该没有问题。

再次观察现象:好像是外键约束的问题,因为每当插入到带有外键的表的时候数据死活录入不进去。
分析和操作
既然是外键表的问题,首先应该确定外键表中的内容是什么,于是手动改数据库隔离等级查看数据,果然里面是乱码!

问题:乱码是怎么进入数据库的?
分析和操作:
要么读取xml的时候就是乱码,要么在往数据库里写的时候变成乱码。再次断点调试测试在程序中是否乱码。

现象:在eclipse当中打印出来信息没有出现乱码问题
分析与操作:
这就说明在程序中一切没有问题,是数据库的问题。于是先改数据库链接字符串指定编码,再改数据库的编码,再次断点调试。

现象:数据库中依然是乱码,但是乱码的形式换了,之前全是“?”现在是一些乱七八糟的文字。
分析和操作:
很明显上面一系列修改编码格式的操作起作用了,只是没有修改对而已。再次检查各项的编码格式,没有发现问题
问题一度陷入僵局……
寻求帮助:秋提出别用命令窗口了,太麻烦了,用第三方客户端吧,于是换用第三方客户端,奇怪的是客户端显示没有问题!
分析和操作:
客户端没有问题命令窗口有问题,那就说明数据库里已经不是乱码,乱码可能是命令行显示的问题。设置命令行显示字符,果然显示正常!再次测试数据导入----一切OK。

思考与总结
现象:其实在第一次修改完各项编码的时候这个问题已经算是解决了,但是由于当时自己断点调试的时候没有让程序执行完所以一直认为数据库中依然是乱码。
总结:
应该在每次调试的时候让程序跑完,将错误的上下文环境模拟出来,而不是只关注错误本身。

现象:在这里涉及到编码的地方有XML的编码、dom4j的读取编码、数据库编码、数据库连接字符串指定编码、命令行窗口显示编码。这其中哪个没有注意到问题也解决不了(这里自己没有意识到最后一个)。
总结:
全局观的意思是把握每个控制变量,从开始到结束,有意识的跳出环境来做假设。

相关文章

  • Mysql中DATEDIFF函数的基础语法及练习案例

    Mysql中DATEDIFF函数的基础语法及练习案例

    Datediff函数,最大的作用就是计算日期差,能计算两个格式相同的日期之间的差值,下面这篇文章主要给大家介绍了关于Mysql中DATEDIFF函数的基础语法及练习案例 的相关资料,需要的朋友可以参考下
    2022-09-09
  • mysql执行计划介绍

    mysql执行计划介绍

    下面我简单讲讲mysql的执行计划,只列出了一些常见的情况,希望对大家有所帮助
    2013-11-11
  • mysql的数据压缩性能对比详情

    mysql的数据压缩性能对比详情

    这篇文章主要介绍了mysql的数据压缩性能对比,今天对这两种方式分别进行了测试,对比了二者在磁盘占用以及查询性能方面各自的优劣,下面我们大家一起进入文章了解详细内容,需要的朋友也可以参考一下
    2021-11-11
  • 完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

    完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

    下面小编就为大家带来一篇完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL中将一列以逗号分隔的值行转列的实现

    MySQL中将一列以逗号分隔的值行转列的实现

    这篇文章主要介绍了MySQL中将一列以逗号分隔的值行转列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • mysql如何将数据库中的所有表结构和数据导入到另一个库

    mysql如何将数据库中的所有表结构和数据导入到另一个库

    介绍了如何使用mysqldump命令备份和导入数据库,以及创建目标数据库的步骤,首先使用mysqldump备份源数据库,然后在目标数据库中创建数据库,并将备份文件导入到目标数据库,确保数据结构和内容完整复制,提到了DataGrip、Navicat在导入导出过程中可能出现的问题
    2024-10-10
  • MySQL中EXPLAIN语句及用法实例

    MySQL中EXPLAIN语句及用法实例

    我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,下面这篇文章主要给大家介绍了关于MySQL中EXPLAIN语句及用法的相关资料,需要的朋友可以参考下
    2022-05-05
  • MySQL系列之二 多实例配置

    MySQL系列之二 多实例配置

    MySQL多实例就是在一台服务器上同时开启多个不同的服务端口,本文就介绍一下MySQL多实例配置,感兴趣的可以了解一下
    2021-07-07
  • ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN

    ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN

    这篇文章主要介绍了ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN,本文是在MySQL Workbench的环境操作,需要的朋友可以参考下
    2014-11-11
  • win2008 R2服务器下修改MySQL 5.5数据库data目录的方法

    win2008 R2服务器下修改MySQL 5.5数据库data目录的方法

    这篇文章主要介绍了win2008 R2服务器下修改MySQL 5.5数据库data目录的方法,需要的朋友可以参考下
    2016-04-04

最新评论