mysql unsigned 溢出问题

小虫0302 发布于 2012/04/12 13:53
阅读 1K+
收藏 0

Mysql5中字段num类型是 smallint(5) unsigned not null default(0),

当前值是0,当经行一次减法操作时,set num=num-1, num结果变成了65535,好像溢出了。

当然可以在程序一端先做个检查,但是比较麻烦。

PS: mysql4中正常。

有什么办法在mysql5上做个约束,让结果是负数的操作变成默认值0。

加载中
0
游侠
游侠

用 decimal unsigned

0
红薯
红薯
这个你最好是在程序中控制好哦
0
mark35
mark35

mysql的字段约束是无效的(可定义,但不会执行)

 既然数字会有减法操作就不该使用unsign类型,用int4才保险。

0
大东哥
大东哥

呵呵, 土办法, 可以做个触发器. 

我预计可能会被喷.

mark35
mark35
回复 @大东哥 : 直接把负数变成0可能会导致逻辑错误。所以修改字段类型允许负值避免溢出才是根本解决办法
大东哥
大东哥
回复 @mark35 : 让结果是负数的操作变成默认值0 ~~~~ 它的要求是这个啊.
mark35
mark35
那还不如修改字段定义~
0
中山野鬼
中山野鬼

哈,每次计算完 如果是确保 减一操作的话 ,a * (a != (0-1))

或者每次减一操作为 if (a != 0) dec(a)

别说我些的是类C代码。SQL一样有对应的。

返回顶部
顶部