当test表中 b字段 数据类型为int(10) , 数据属性为UNSIGNED , 数值为0时,执行 update `test` set b=b-1 where a = 1 。
测试数据库Mysql提示:#1264 - Out of range value adjusted for column 'b' at row 1
线上数据库Mysql会执行并数据字段数据溢出4294967295
已经找出什么原因导致的了~~~ 谢谢
Mysql 字段 数据溢出问题 如何解决
答案:4 悬赏:80 手机版
解决时间 2021-02-25 17:50
- 提问者网友:最爱你的唇
- 2021-02-25 14:54
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-02-25 15:22
不知道你是oracle还是sql server?这个是个自连接问题,先要排序,标行号,再同表的上下行相比,所以是自连接
orcale:
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)a,
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000
sql server由于只有2005以上版本才有row_number()函数,所以如下脚本只能用在2005以上版本中
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )a,
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000
orcale:
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)a,
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000
sql server由于只有2005以上版本才有row_number()函数,所以如下脚本只能用在2005以上版本中
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )a,
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000
全部回答
- 1楼网友:玩家
- 2021-02-25 16:41
update `test` set b=b-1 where a = 1中
如果这时b=0 set里 b=b-1= -1,UNSIGNED无符号类型 必须大于等于0,
- 2楼网友:人類模型
- 2021-02-25 16:31
取绝对值的方式如下
update `test` set b=abs(b-1) where a = 1 。
如果是小于0是都为0的那种,你就应该在程序里执行该语句前进行判断。
- 3楼网友:爱难随人意
- 2021-02-25 15:48
新版本的MySQL对字段的严格检查。
解决方法(两种方法任选一种即可):
1、修改my.ini,将
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
改为
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯