萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中unsigned類型字段出現65535錯誤

mysql中unsigned類型字段出現65535錯誤

這裡是使用了unsigned 的 smallint 字段類型在更新時提示 65535錯誤了,這個意思是長度在65535之外了,也就是會出現補數溢出的情況了,下面本文章來給各位介紹解決辦法。

$sql = "UPDATE `dzxbbs_common_member` SET newprompt=newprompt-1 WHERE uid='{$uid}'";

`dzxbbs_common_member` 表中 newprompt的類型是 smallint unsigned  長度為6的類型。

當newprompt值為0時,執行這條sql語句,得到了意想不到的結果newprompt字段值變成了65535。

出現這個問題的服務器版本是 mysql 5.1.38-log。

解決這個需要設置這個參數 sql_mode="NO_UNSIGNED_SUBTRACTION" 啟用這個選項後兩個UNSIGNED類型相減返回SIGNED類型。

我在本地測試的結果是報錯
#1690 – BIGINT UNSIGNED value is out of range in '(`test`.`test`.`view` – 1)'

服務器版本: mysql 5.5.16

開源電商系統ecshop商品庫存也存在突然變成65535的問題

補充:unsigned相關字段長度

unsigned 既為非負數,用此類型可以增加數據長度! 
例如如果 tinyint最大是127,那 tinyint unsigned 最大 就可以到 127 * 2 
unsigned 屬性只針對整型,而binary屬性只用於char 和varchar。

類型 說明 tinyint 非常小整數 smallint 較小整數 mediumint 中等大小整數 int 標准整數 bigint 較大整數 float 單精度浮點數 double 雙精度浮點數 decimal 一個串浮點數

每種數值類型名稱和取值范圍如表2所示。 類型說明 取值范圍 tinyint[(m)] 有符號值:-128 到127(- 27 到27 - 1) 無符號值:0到255(0 到28 - 1) 1個字節 smallint[(m)] 有符號值:-32768 到32767(- 215 到215 - 1) 無符號值:0到65535(0 到21 6 - 1) 2個字節 mediumint[(m)] 有符號值:-8388608 到8388607(- 22 3 到22 3 - 1 ) 無符號值:0到16777215(0 到22 4 - 1) 3個字節 int[(m)] 有符號值:-2147683648 到2147683647(- 231 到231- 1) 無符號值:0到4294967295(0 到232 - 1) 4個字節 bigint[(m)] 有符號值:-9223372036854775808 到9223373036854775807(- 263到263-1) 無符號值:0到18446744073709551615(0到264 – 1) 8個字節 float[(m, d)] 最小非零值:±1.175494351e - 38 double[(m,d)] 最小非零值:±2.2250738585072014e - 308 decimal (m, d) 可變;其值范圍依賴於m 和d 表2:數值列類型取值范圍 各種類型值所需存儲量如表3所示。 類型說明 存儲需求 tinyint[(m)] 1字節 smallint[(m)] 2字節 mediumint[(m)] 3字節 int[(m)] 4字節 bigint[(m)] 8字節 float[(m, d)] 4字節 double[(m, d)] 8字節 decimal (m, d) m字節(mysql < 3.23),m+2字節(mysql > 3.23 )
copyright © 萬盛學電腦網 all rights reserved