当前位置:博客首页>>PHP >> 阅读正文

mysql无符号整型自减运算时溢出的解决

作者: 郑晓 分类: PHP 发布于: 2015-12-07 17:52 浏览:12,541 评论(6)


在mysql中给一个无符号整型字段做自减运算时,如果结果小于0,将直接溢出,并没有报错。
正常情况应该会报一个BIGINT UNSIGNED value is out of range的错误,至少我本地的mysql是这样的,但线上的mysql中却能正常执行,然后字段的值变成了四十多亿4294967295。。。

可能是由于mysql的配置问题导致的,但我没找到如何配置,也没有权限配置。所以只能从程序上下手。
程序生成的sql本来是类似这样的:

update table set field=field-1 where xxx=xxx;

自减1,如果要判断结果的话,还得去查一下库吧??
所以我使用了这种办法。
把field=field-1改成:

field=convert(field+(-1), signed)

这样就解决了,在相减时如果值是负值,会直接是0。

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/mysql-unsigned-value-is-out.html

mysql无符号整型自减运算时溢出的解决:目前有6 条留言

用户评论头像 负心的炒肝发表于 2016年02月04日 01:52[回复]

哈哈哈

用户评论头像 AdOnCn.COM发表于 2016年01月16日 09:36[回复]

很好,感谢!

用户评论头像 好书网发表于 2016年01月08日 22:12[回复]

好久没来看看了、2016发大财行大运 54好书网 致上

用户评论头像 6306011发表于 2016年01月03日 17:27[回复]

看看!

用户评论头像 李洋博客发表于 2015年12月26日 13:21[回复]

mysql不懂啊,@李洋博客

    用户评论头像 郑晓发表于 2015年12月27日 20:22[回复]

    其实都差不多。

发表评论

change vcode