mysql乱码问题分析与解决方法
网络编程 2021-07-05 15:27www.168986.cn编程入门
开发过程中总避免不了遇到恶心的乱码,或者由乱码引发的一系列问题,这里简要介绍一下自己遇到的乱码问题和解决问题的过程中的想法以及大致的操作
开发过程中总避免不了遇到恶心的乱码,或者由乱码引发的一系列问题。出现乱码是字符集的原因一般而言和逻辑没有太大关系,也就是说整个系统大的方向没有问题,小的地方出现了漏洞,进而导致程序不能正常运行,所以说出现乱码是一件令人非常很恶心的事情。这里简要介绍一下自己遇到的乱码问题和解决问题的过程中的想法以及大致的操作,我们要学会的是如何分析问题进而解决问题,而不仅仅是照着网上的操作去一次次的解决眼前的困难,“鱼”与“渔”的区别就在于此。
交代背景
要实现的功能很简单,用dom4J读取XML文件然后借助Spring以及Hibernate将数据写入到MySql数据库(多表)中,整个过程是由Spring控制事务一次性完成,有异常进行回滚。
现象在往数据库里写数据写到一半的时候报错,大致的错误信息是记录不是唯一。
分析和操作
检查了一遍自己的代码,用Spring当中的HibernateTemplete保存数据,应该没有问题。
观察现象好像是外键约束的问题,因为每当插入到带有外键的表的时候数据死活录入不进去。
分析和操作
既然是外键表的问题,应该确定外键表中的内容是什么,于是手动改数据库隔离等级查看数据,果然里面是乱码!
问题乱码是怎么进入数据库的?
分析和操作
要么读取xml的时候就是乱码,要么在往数据库里写的时候变成乱码。断点调试测试在程序中是否乱码。
现象在eclipse当中打印出来信息没有出现乱码问题
分析与操作
这就说明在程序中一切没有问题,是数据库的问题。于是先改数据库链接字符串指定编码,再改数据库的编码,断点调试。
现象数据库中依然是乱码,乱码的形式换了,之前全是“?”现在是一些乱七八糟的文字。
分析和操作
很明显上面一系列修改编码格式的操作起作用了,只是没有修改对而已。检查各项的编码格式,没有发现问题
问题一度陷入僵局……
寻求帮助秋提出别用命令窗口了,太麻烦了,用第三方客户端吧,于是换用第三方客户端,奇怪的是客户端显示没有问题!
分析和操作
客户端没有问题命令窗口有问题,那就说明数据库里已经不是乱码,乱码可能是命令行显示的问题。设置命令行显示字符,果然显示正常!测试数据导入----一切OK。
思考与
现象其实在第一次修改完各项编码的时候这个问题已经算是解决了,由于当时自己断点调试的时候没有让程序执行完所以一直认为数据库中依然是乱码。
应该在每次调试的时候让程序跑完,将错误的上下文环境模拟出来,而不是只关注错误本身。
现象在这里涉及到编码的地方有XML的编码、dom4j的读取编码、数据库编码、数据库连接字符串指定编码、命令行窗口显示编码。这其中哪个没有注意到问题也解决不了(这里自己没有意识到一个)。
全局观的意思是把握每个控制变量,从开始到结束,有意识的跳出环境来做假设。
交代背景
要实现的功能很简单,用dom4J读取XML文件然后借助Spring以及Hibernate将数据写入到MySql数据库(多表)中,整个过程是由Spring控制事务一次性完成,有异常进行回滚。
现象在往数据库里写数据写到一半的时候报错,大致的错误信息是记录不是唯一。
分析和操作
检查了一遍自己的代码,用Spring当中的HibernateTemplete保存数据,应该没有问题。
观察现象好像是外键约束的问题,因为每当插入到带有外键的表的时候数据死活录入不进去。
分析和操作
既然是外键表的问题,应该确定外键表中的内容是什么,于是手动改数据库隔离等级查看数据,果然里面是乱码!
问题乱码是怎么进入数据库的?
分析和操作
要么读取xml的时候就是乱码,要么在往数据库里写的时候变成乱码。断点调试测试在程序中是否乱码。
现象在eclipse当中打印出来信息没有出现乱码问题
分析与操作
这就说明在程序中一切没有问题,是数据库的问题。于是先改数据库链接字符串指定编码,再改数据库的编码,断点调试。
现象数据库中依然是乱码,乱码的形式换了,之前全是“?”现在是一些乱七八糟的文字。
分析和操作
很明显上面一系列修改编码格式的操作起作用了,只是没有修改对而已。检查各项的编码格式,没有发现问题
问题一度陷入僵局……
寻求帮助秋提出别用命令窗口了,太麻烦了,用第三方客户端吧,于是换用第三方客户端,奇怪的是客户端显示没有问题!
分析和操作
客户端没有问题命令窗口有问题,那就说明数据库里已经不是乱码,乱码可能是命令行显示的问题。设置命令行显示字符,果然显示正常!测试数据导入----一切OK。
思考与
现象其实在第一次修改完各项编码的时候这个问题已经算是解决了,由于当时自己断点调试的时候没有让程序执行完所以一直认为数据库中依然是乱码。
应该在每次调试的时候让程序跑完,将错误的上下文环境模拟出来,而不是只关注错误本身。
现象在这里涉及到编码的地方有XML的编码、dom4j的读取编码、数据库编码、数据库连接字符串指定编码、命令行窗口显示编码。这其中哪个没有注意到问题也解决不了(这里自己没有意识到一个)。
全局观的意思是把握每个控制变量,从开始到结束,有意识的跳出环境来做假设。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程