一次特殊的“VARCHAR转numeric失败”错误记录

今天接触到一个很有意思的问题。当我在执行一条INSERT的sql语句时,他总是报字符串转数字类型失败。

问题

首先,该表中的所有数字类型的字段都是非必填,其次,每个数字类型的字段都有默认值。最令我感到疑惑的是,当我测试不加入那些必填字段做INSERT时,数据库仍然报这个错误,这就让我有点摸不着头脑了,因为我的经验是当你新增数据而没有添加必填字段一起时(这些字段没有默认值),数据库肯定是会报这个错误,而且当SQL中存在其他错误时,也是优先报出这种错误。所以今天这个错误让我感到很疑惑。

虽然很疑惑这个报错的情况不符合自己以往的经验,但还是打算循着这个错误描述去对每个字段作检查。

调试

首先,将INSERT语句中的非数字类型的字段及其值删除,执行后,发现还是会报一样的错误,而且提供的所有的值都是数字。接着,查看表中有哪些数字类型的字段,然后再查看INSERT语句中缺少了哪个,终于发现一个数字类型的字段不存在于INSERT中,于是添加这个字段做测试,果不其然,语句成功执行。到这里,基本上能猜测到导致该问题的原因了,也即,当我没有添加该字段做新增时,语句失败,添加后,语句成功,那么很明显,是该字段的默认值有问题(因为数字类型的字段在不做处理的情况下,是不可以保存空值的)。经过检查,该字段的默认值是一个空字符串''。解决方法很简单,修改其默认值为0即可。

总结

此次遇到的这个问题,并不复杂,使得自己愿意写一篇文章的原因主要是自己的经验欺骗了自己。特别是在不添加必填字段执行语句时,报的错误居然不是符合自己经验的情况,这让自己走进了误区。后面,自己将会去深入的研究一下,SQL报错时,是基于什么优先级来处理的。

本篇文章由一文多发平台ArtiPub自动发布

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,494评论 0 9
  • 去年有段时间得空,就把谷歌GAE的API权威指南看了一遍,收获颇丰,特别是在自己几乎独立开发了公司的云数据中心之后...
    骑单车的勋爵阅读 20,809评论 0 41
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,851评论 0 4
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,930评论 0 1
  • 《第308期六项精进》 姓名:彭万红 【日精进打卡第75天—2018年1月3日】 公司:广东顺创律师事务所 企业使...
    1b5f4a5ab414阅读 95评论 0 0