mysql unsigned 用法及相減出現補數溢出解決方法

unsigned表示無符號的意思,也就是非負數,只用于整型并且unsigned 是mysql自定義的類型,非標準SQL。用途1是紅苕說的起到約束數值的作用,2是可以增加數值范圍(相當于把負數那部分加到正數上)。不過少用,不方便移植

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

每種數值類型的名稱和取值范圍如表2所示。

表2:數值列類型的取值范圍

各種類型值所需的存儲量如表3所示。

表3:數值列類型的存儲需求

mysql提供了五種整型: tinyint、smallint、mediumint、int和bigint。int為integer的縮寫。這些類型在可表示的取值范圍上是不同的。 整數列可定義為unsigned從而禁用負值;這使列的取值范圍為0以上。各種類型的存儲量需求也是不同的。取值范圍較大的類型所需的存儲量較大。

mysql 提供三種浮點類型: float、double和decimal。與整型不同,浮點類型不能是unsigned的,其取值范圍也與整型不同,這種不同不僅在于這些類型有最大 值,而且還有最小非零值。最小值提供了相應類型精度的一種度量,這對于記錄科學數據來說是非常重要的

mysql5 unsigned 相減出現補數 溢出 解決辦法

Mysql5 為了速度,只存放數二進制數據,而且在加減運算中,也是二進制的運算.

所以在使用unsigned 是小心0-1 的操作.盡量在這類操作前先做一個判斷.

如果直接在程序里進行判定,難免會出現數據錯誤,因為有一點點時間內數據是放在內存的,而沒放進庫里,最好的辦法還是直接送出sql語句進行修改,這里mysql5有解決辦法 CONVERT( 字段 + (要加減的數字) AS SIGNED )就可以了。

例如:UPDATE `user` SET `tk` = CONVERT( tk + (-8) ,SIGNED ) WHERE `id` = ‘1330’

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享