解决:为何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!



目录
相关文章
|
6天前
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
48 17
|
14天前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
1月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
115 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
99 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
1月前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
86 9
|
1月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
107 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
2月前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
193 7
|
2月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
161 6
|
3天前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。
|
14天前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。

热门文章

最新文章