mysql無符號整型自減運算時溢出的解決
作者: 鄭曉 分類: PHP 發(fā)布于: 2015-12-07 17:52 瀏覽:12,593 評論(6)
在mysql中給一個無符號整型字段做自減運算時,如果結(jié)果小于0,將直接溢出,并沒有報錯。
正常情況應(yīng)該會報一個BIGINT UNSIGNED value is out of range的錯誤,至少我本地的mysql是這樣的,但線上的mysql中卻能正常執(zhí)行,然后字段的值變成了四十多億4294967295。。。
可能是由于mysql的配置問題導(dǎo)致的,但我沒找到如何配置,也沒有權(quán)限配置。所以只能從程序上下手。
程序生成的sql本來是類似這樣的:
update table set field=field-1 where xxx=xxx;
自減1,如果要判斷結(jié)果的話,還得去查一下庫吧??
所以我使用了這種辦法。
把field=field-1改成:
field=convert(field+(-1), signed)
這樣就解決了,在相減時如果值是負值,會直接是0。
? ? ? ?
本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/mysql-unsigned-value-is-out.html
哈哈哈