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

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

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

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

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

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

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

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

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

Mac 将mysql路径加入环境变量的方法

这篇文章主要介绍了Mac如何将mysql路径加入环境变量,有需要的朋友好按照下面的步骤操作即可
收藏 0 赞 0 分享

mysql 增加修改字段类型及删除字段类型

本节主要介绍了mysql如何增加修改字段类型及删除字段类型,需要的朋友可以参考下
收藏 0 赞 0 分享

Mysql主从复制(master-slave)实际操作案例

这篇文章主要介绍了Mysql主从复制(master-slave)实际操作案例,同时介绍了Mysql grant 用户授权的相关内容,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL异常处理浅析

这篇文章主要介绍了MySQL的异常处理,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL存储毫秒数据的方法

MySQL中没有可以直接存储毫秒数据的数据类型,但是不过MySQL却能识别时间中的毫秒部分。这篇文章主要介绍了MySQL存储毫秒数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySql中使用INSERT INTO语句更新多条数据的例子

这篇文章主要介绍了MySql中使用INSERT INTO语句更新多条数据的例子,MySQL的特有语法,需要的朋友可以参考下
收藏 0 赞 0 分享

Windows下MySql错误代码1045的解决方法

这篇文章主要介绍了Windows下MySql错误代码1045的解决方法,文中还包含了2个Linux下的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句

这篇文章主要介绍了mysql查询今天、昨天、近7天、近30天、本月、上一月的SQL语句,一般在一些统计报表中比较常用这个时间段,需要的朋友可以参考下
收藏 0 赞 0 分享

mysql的中文数据按拼音排序的2个方法

这篇文章主要介绍了mysql的中文数据按拼音排序的2个方法,用于一些特殊环境,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL定期分析检查与优化表的方法小结

听DBA的人说,相比oracle,MySQL就是一个玩具级别的数据库,在网易门户中,DBA基本很少去管理到MySQL的东西,所以我们产品使用到的MySQL的一些配置和优化还是需要我们开发人员自己动手,下面就简单介绍一下实用的定期优化方法
收藏 0 赞 0 分享
查看更多