在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。