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的读取编码、数据库编码、数据库连接字符串指定编码、命令行窗口显示编码。这其中哪个没有注意到问题也解决不了(这里自己没有意识到一个)。
全局观的意思是把握每个控制变量,从开始到结束,有意识的跳出环境来做假设。
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指