當前位置:博客首頁>>PHP >> 閱讀正文

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

mysql無符號整型自減運算時溢出的解決:目前有6 條留言

用戶評論頭像 負心的炒肝發(fā)表于 2016年02月04日 01:52[回復(fù)]

哈哈哈

用戶評論頭像 AdOnCn.COM發(fā)表于 2016年01月16日 09:36[回復(fù)]

很好,感謝!

用戶評論頭像 好書網(wǎng)發(fā)表于 2016年01月08日 22:12[回復(fù)]

好久沒來看看了、2016發(fā)大財行大運 54好書網(wǎng) 致上

用戶評論頭像 6306011發(fā)表于 2016年01月03日 17:27[回復(fù)]

看看!

用戶評論頭像 李洋博客發(fā)表于 2015年12月26日 13:21[回復(fù)]

mysql不懂啊,@李洋博客

發(fā)表評論

change vcode