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

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

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

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

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

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

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

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

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

简单了解标准SQL的update语句三种用法

这篇文章主要介绍了简单了解标准SQL的update语句三种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL5.7.23解压版安装教程图文详解

这篇文章主要介绍了MySQL5.7.23解压版安装教程图文详解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

python 连接数据库mysql解压版安装配置及遇到问题

今天学习python连接数据库,就想安装一下mysql数据库,没想到小小的数据库也遇到了不少挫折,所以我就把自己的安装过程以及问题写出来分享给大家,需要的朋友可以参考下
收藏 0 赞 0 分享

为什么说MySQL单表数据不要超过500万行

在本篇文章里小编给大家整理了一篇关于为什么说MySQL单表数据不要超过500万行的相关内容,有兴趣的朋友们阅读下吧。
收藏 0 赞 0 分享

基于python的mysql复制工具详解

python-mysql-replication 是基于python实现的 MySQL复制协议工具,我们可以用它来解析binlog 获取日志的insert,update,delete等事件 ,并基于此做其他业务需求。这篇文章主要介绍了基于python的mysql复制工具,需要的朋
收藏 0 赞 0 分享

mysql语句查询用户权限过程详解

这篇文章主要介绍了mysql语句查询用户权限过程详解,授予用户的权限可能分全局层级权限、数据库层级权限、表层级别权限、列层级别权限、子程序层级权限。,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL创建数据表并建立主外键关系详解

这篇文章主要介绍了MySQL创建数据表并建立主外键关系详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL表中添加时间戳的几种方法

这篇文章主要介绍了MySQL表中添加时间戳的几种方法,有张表的数据需要用同步工具同步至其他库,需要 update_time 时间戳字段 来做增量同步,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL如何实现负载均衡功能

这篇文章主要介绍了MySQL如何实现负载均衡功能,学习过数据库的朋友们都会知道MySQL,那么如何在MySQL下实现负载均衡功能呢?本文就将为大家细致地介绍一下
收藏 0 赞 0 分享

mysql server 5.5连接不上的解决方法

这篇文章主要为大家详细介绍了mysql server 5.5连接不上的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多