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

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

问题

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

虽然很疑惑这个报错的状况不符合本身以往的经验,但仍是打算循着这个错误描述去对每一个字段做检查。sql

调试

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

总结

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

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

相关文章
相关标签/搜索