MySQL+MyBatis推送数据tinyint(1)失败问题解决

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 MySQL+MyBatis推送数据tinyint(1)失败问题解决,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

背景

最近在负责的一个大数据产品项目中,有一个数据推送/同步数据的功能。即,支持将数据以查询SQL的形式从数据源A查询出来,然后写入到数据源B中。用户提交的SQL,并未做仅能查询的限制,也就是说,可以在SQL里面写,insert overwrite等数据更新的逻辑。

问题报错

生产环境的MySQL数据同步到预发环境。为了实现数据推送的功能,推送到目标数据源的数据,即期望插入到预发环境的表,表的数量和类型,应该和数据源A的查询字段,也就是生产环境的表字段,能够匹配上。

目标数据源的表字段如果少于源头数据源的表字段,则源头数据源查询出来的数据被忽略,不会存储到目标数据源里。

当然,目的数据源的数据表字段允许多余源头数据源的数据表字段,这些多余的字段,由于在数据源头并没有定义,在目标数据源里会被设置为null,或是表字段定义的default值。

业务同学反馈数据同步失败,预发环境的数据不对。

从数据源A获取数据的SQL语句为:

select
id,name,sort,type,url,inserttime,updatetime,isactive
from
rhinoce_menu

排查

对比一下两个数据源的表结构定义,注意到只有一个字段和源头的数据表字段不一样,就是type,无意间发现其类型为tinyint(1),隐隐约约感觉定位到问题根源。参考Mybatis笔记之tinyint自动转型为boolean

验证

本地修改一下测试数据表的字段类型为tinyint(1)
在这里插入图片描述
也就是说,查询得到的数据,本来应该是1或0,经过MyBatis的转化,变成True/False。

参考

解决MySQL数据库tinyint(1) 转换为Java的Boolean解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142145.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!