溢出通常是指的数字类型的一个溢出问题了,对于这个问题小编整理了一篇关于解决mysql无符号整型自减运算时溢出的问题的教程,希望对各位同学会有所帮助.
在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。