一次特殊的“VARCHAR转numeric失败”错误记录
今天接触到一个很有意思的问题。当我在执行一条INSERT的sql语句时,他总是报字符串转数字类型失败。
问题
首先,该表中的所有数字类型的字段都是非必填,其次,每个数字类型的字段都有默认值。最令我感到疑惑的是,当我测试不加入那些必填字段做INSERT时,数据库仍然报这个错误,这就让我有点摸不着头脑了,因为我的经验是当你新增数据而没有添加必填字段一起时(这些字段没有默认值),数据库肯定是会报这个错误,而且当SQL中存在其他错误时,也是优先报出这种错误。所以今天这个错误让我感到很疑惑。
虽然很疑惑这个报错的情况不符合自己以往的经验,但还是打算循着这个错误描述去对每个字段作检查。
调试
首先,将INSERT语句中的非数字类型的字段及其值删除,执行后,发现还是会报一样的错误,而且提供的所有的值都是数字。接着,查看表中有哪些数字类型的字段,然后再查看INSERT语句中缺少了哪个,终于发现一个数字类型的字段不存在于INSERT中,于是添加这个字段做测试,果不其然,语句成功执行。到这里,基本上能猜测到导致该问题的原因了,也即,当我没有添加该字段做新增时,语句失败,添加后,语句成功,那么很明显,是该字段的默认值有问题(因为数字类型的字段在不做处理的情况下,是不可以保存空值的)。经过检查,该字段的默认值是一个空字符串''。解决方法很简单,修改其默认值为0即可。
总结
此次遇到的这个问题,并不复杂,使得自己愿意写一篇文章的原因主要是自己的经验欺骗了自己。特别是在不添加必填字段执行语句时,报的错误居然不是符合自己经验的情况,这让自己走进了误区。后面,自己将会去深入的研究一下,SQL报错时,是基于什么优先级来处理的。
一次特殊的“VARCHAR转numeric失败”错误记录的更多相关文章
- sql 关于查询时 出现的 从数据类型 varchar 转换为 numeric 时出错 的解决方法。
出现这种问题 一般是查询时出现了 varchar 转 numeric 时出了错 或varchar字段运算造成的 解决方法: 让不能转的数不转换就可以了 sql的函数有个isNumeric(参数) 用 ...
- 从数据类型 varchar 转换为 numeric 时出错.
如果说你的数据库字段是varchar,但是存储的数据是数值,在出报表时需要转成int或numeric时,无论怎么样都报错. 错误信息: 消息 8114,级别 16,状态 5,第 1 行 从数据类型 v ...
- sql server<> != 从数据类型varchar转换为numeric 时出错
sql server 数据类型转换出错 字段percentcomplete 是 varchar 类型, 都是存的数字 用 where cast(percentcomplete as numeric(1 ...
- 烂泥:【解决】virtualbox启动报创建COM对象失败错误
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天在启动virtualbox时,发现virtualbox报创建COM对象失败错误,如下图: 查找相关资料发现很有可能是virtualbox与OS不兼容 ...
- 编译器 expected unqualified-id before numeric constant 错误
今天调试代码,碰到expected unqualified-id before numeric constant 错误,代码的错误模块出现在一个函数模块上, 奇怪的是这个函数模块之前编译了很多次,也没 ...
- Visual Studio 2012 Update3 安装失败错误“正在关闭管道'
问题描述: Visual Studio 2012 update3 安装失败错误“ 正在关闭管道' 环境: Windows 7 SP1(x86和x64) Windows 8(x86和x64) Windo ...
- MySQL主从失败 错误Got fatal error 1236解决方法
--MySQL主从失败 错误Got fatal error 1236解决方法 ----------------------------------------------------2014/05/1 ...
- UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化"
开发时在做UserControl,需要注意的List<>集合问题~~~! 其他类型的集合可能也存在这样的问题,但是我没去测试,在写集合的时候一般List<>用的多点,所以经常碰 ...
- 【常见的SQL Server连接失败错误以及解决方法】
[常见的SQL Server连接失败错误以及解决方法] http://blog.csdn.net/feixianxxx/article/details/5523922 ADO连接SQL Server ...
随机推荐
- Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)
leetcode上做提示时候看到有高人用这个方法解题 [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = [' ...
- mnist 卷积神经网络
# from keras.models import Sequential# from keras.layers.core import Dense,Activation,Flatten #creat ...
- bzoj5020 & loj2289 [THUWC 2017]在美妙的数学王国中畅游 LCT + 泰勒展开
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5020 https://loj.ac/problem/2289 题解 这个 appear 和 d ...
- 前端之JQuery:JQuery文档操作
jquery之文档操作 一.相关知识点总结1.CSS .css() - .css("color") -> 获取color css值 - .css("color&qu ...
- 关于mysql(Navicat premium软件中) 外键设置中“删除”和“更新”选项详解
ON DELETE restrict(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除. no action:意思同restrict.即如果存在从数 ...
- Delphi 2010 secondsBetween Bug
在设置定时任务时,无意之间发现一个BUG, 定时在00:10:00的任务,执行了2次, 百思不得其解, 一调试发现, 00:10:00,00:09:59的secondsBetween结果值是0, 正确 ...
- slick轮播图使用大全
let oSlick = { dom: null, isMobile: false, slickInited: false, barInterval:null, currentSlide:, last ...
- CF G. Orientation of Edges BFS
来两遍 $BFS,$ 都贪心一下即可. #include <bits/stdc++.h> #define maxn 300009 using namespace std; void set ...
- scanf()函数原理
一.三点说明 1.用户输入的字符,会以ASCII码形式存储在键盘缓冲区:2.每调用一次scanf函数,就从键盘缓冲区读走一个字符,相当于清除缓冲区:3.若用户一次输入n个字符,则前n次调用scanf函 ...
- android读取xml
/*** 从config.xml中获取版本信息以及应用id* * @param urlPath* @return* @throws Exception*/public List getUpdateIn ...