解决:为何Java执行插入sql,保存进数据库的中文内容会自动变成问号??【解决方案】

简介: 解决:为何Java执行插入sql,保存进数据库的中文内容会自动变成问号??【解决方案】

一、前言🔥


👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

      哈喽,小伙伴们,我是bug菌呀👀,不知不觉就一年又4月,正是踏青郊游的好时节。可上海疫情,除了在家远程办公就是看点技术顺便卷点文章。这不是4月又出了更文活动,逼自己一把,坚持每天做点内容输出,养成写作习惯,将来你会回来感谢曾经的自己坚持了一把才有此刻的辉煌成就。

      小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,掘金不停💕,加油☘️


二、环境说明🔥


**环境:**jdk1.8 + springboot 2.3.1 + mybatis-plus3.2 + mysql5.6


三、排错分析🔥


     我coding着正快要进入忘我境界,突然我的消息一直弹屏,我还是抓紧看看具体发生了啥吧。

      于是我打开vx,看到群消息后,呆住!离谱????

bug菌:"心想,不可能是我的问题的。"

小伙伴:"bug菌啊,为啥我输入的中文保存后变成一串问号了啊??我也没做字符转码呀,今天就是这个情况。你赶紧看看,肯定又是你写的bug。难怪取名叫bug菌,名副其实!。"

bug菌:"这么离谱?我啥也没变动啊,接口照旧呀,之前测了不是都正常嘛。怕不是要冤枉好人。"

bug菌:"深吸了口气,好像想到了点啥?"

bug菌:"那你再测一下别的新增接口,看看中文是不是也乱码?是只中文保存后变成了' ??? ',还是都变成' ??? '。"

小伙伴:"别的接口也是!变成了不固定的问号。"

小伙伴:"就是中文,输入的数字,字符串都不变。"

bug菌:"好的,基本了解,这是后端bug,我马上定位问题并修改bug"。

bug菌正火急火燎的赶往事故发生地。

...

小伙伴们,你们光到这儿,能精准定位问题是啥不?如果你心里没有啥解决方案,那么跟随 bug菌过来,看看他是如何一步步排查到事故现场把!


我首先打开[ idea ]编辑器,运行[ debug ]模式。


第一步:先确定,接口参数传到后端再到接口逻辑层中间是否有被转义?

排查下来并没有,且sql执行也显示中文,如下是sql执行过程:


网络异常,图片无法展示
|


第二步:排查一下,数据库数据保存情况,是否中午变问号了?

ok!很明显,插入的中文乱码变成了一堆问号了。


网络异常,图片无法展示
|


第三步:确定idea编辑器的编码格式 与数据库的编码格式否是一直?

排查下来,设置的都是utf-8 编码。


第四步:排查下来,事故是发生在sql执行上,我就想,sql执行时啥设置会对它有影响?

真相大白!大家请看:发现了什么没有?


网络异常,图片无法展示
|


      我的数据库连接配置竟然变了!!被谁给改掉了。查看git提交记录才发现,是被我昨晚定位另一个bug临时给改了,忘了把注释放开。

到这儿,你们知道这个事故是啥了嘛?小伙伴们。


四、解决方案🔥


在你的配置文件中对配置数据库的url地址最后拼接一下如下这串,问题解决!!


&useUnicode=true&characterEncoding=utf-8


拓展:

数据库连接url拼接这串有啥作用呢?

      字面解读:使用Unicode字符集并且设置字符编码为utf-8。

      其实真正它的作用分两方面:

1、往数据库插入数据时:

      数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

2、从数据库取出数据时:

      数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。


实际添加截图:


网络异常,图片无法展示
|


最后咱们重启项目,再随便通过一个新增接口试试,问题解决没有!


网络异常,图片无法展示
|


很明显,中文输入保存正常,接口获取时也正常,一切正常。

**完美,收工!**perfect!!

 ... ...


      ok,以上这样就好啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~


五、往期推荐🔥



六、文末🔥


      如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《SpringBoot零基础入门》,从无到有,从零到一!希望能帮到大家。

      我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!



目录
相关文章
|
14天前
|
SQL 数据库 Python
数据库 SQL常用语句
这篇文章是数据库SQL的常用语句指南,涵盖了查询格式、WHERE子句查询条件、多表连接查询、嵌套查询、字符匹配查询以及其他指令如排序、聚集函数、GROUP BY分组、EXIST子查询和外连接等知识点。
|
11天前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
10 1
|
8天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
18 0
|
11天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
27 0
|
11天前
|
SQL 数据处理 数据库
|
11天前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
30 0
|
11天前
|
SQL 存储 监控
|
11天前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
19 0
|
11天前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
26 0
|
11天前
|
Java 开发者 前端开发
Struts 2:如何在大型项目中力挽狂澜,成就企业级应用开发的巅峰之作!
【8月更文挑战第31天】在本案例研究中,我们探讨了Struts 2框架在国际贸易管理系统(ITMS)中的应用,展示了其在大型项目中的优势与实践经验。Struts 2凭借其强大的表单处理、灵活的Action配置、拦截器机制及国际化支持,成为构建可扩展、高性能Web应用的理想选择。文章详细介绍了RESTful URL设计、Ajax集成、文件上传与下载等功能实现,并分享了性能优化、安全措施及遇到的问题与解决方案,为开发者提供了宝贵的参考。通过持续集成与新技术的应用,我们不断优化系统,提升开发效率与竞争力。
22 0