数字值超出范围:1690 BIGINT UNSIGNED值超出范围

时间:2019-04-17 20:11:28

标签: mysql sql numbers integer-overflow

我有一个查询:

update `shops` set
    `points` = `points` - 2,
    `updated_at` = '2019-04-17 23:07:11'
where `id` = 4;

列点的列类型为:BIGINT(20)。

现在在记录中,我的值为62。运行上面的查询时,出现此错误:

  

SQLSTATE [22003]:数值超出范围:1690 BIGINT UNSIGNED   值超出了'(`database`.`shops`.`points`-2)'

不一样。

2 个答案:

答案 0 :(得分:1)

您不能以无符号整数存储负值。较安全的解决方案是在执行减法之前检查操作数:

SET points = CASE WHEN points >= 2 THEN points - 2 ELSE 0 END

或者简单地:

SET points = points - LEAST(points, 2)

答案 1 :(得分:0)

这将起作用:

 set `points` = `points` - cast(2 AS SIGNED)

`updated_at` = '2019-04-17 23:07:11'