mysql中int、bigint、smallint 和 tinyint的區別

使用整數數據的精確數字數據類型。

bigint

從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小爲 8 個字節。

int

從 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型數據(所有數字)。存儲大小爲 4 個字節。int 的 SQL-92 同義字爲 integer

smallint

從 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型數據。存儲大小爲 2 個字節。

tinyint

從 0 到 255 的整型數據。存儲大小爲 1 字節。

註釋

在支持整數值的地方支持 bigint 數據類型。但是,bigint 用於某些特殊的情況,當整數值超過 int 數據類型支持的範圍時,就可以採用 bigint。在 SQL Server 中,int 數據類型是主要的整數數據類型。

在數據類型優先次序表中,bigint 位於 smallmoney 和 int 之間。

只有當參數表達式是 bigint 數據類型時,函數才返回 bigint。SQL Server 不會自動將其它整數數據類型(tinyintsmallint 和 int)提升爲 bigint

在MySQL的數據類型中,Tinyint的取值範圍是:帶符號的範圍是-128到127。無符號的範圍是0到255(見官方《MySQL 5.1參考手冊》)。

Tinyint佔用1字節的存儲空間,即8位(bit)。那麼Tinyint的取值範圍怎麼來的呢?我們先看無符號的情況。無符號的最小值即全部8位(bit)都爲0,換算成十進制就是0,所以無符號的Tinyint的最小值爲0.無符號的最大值即全部8bit都爲1,11111111,換算成十進制就是255.這很好理解。

有符號的Tinyint的取值範圍是怎麼來的呢?在計算機中,用最高位表示符號。0表示正,1表示負,剩下的表示數值。那麼有符號的8bit的最小值就是

  1  1  1  1  1  1  1  1=-127

表示負值

最大值:

  0  1  1  1  1  1  1  1=+127

表示正值

怎麼有符號的最小值是-127,而不是-128呢?這就是本文要說的關鍵地方了,在計算機中,表示負值是用補碼(正碼、反碼、補碼的概念見 http://blog.sina.com.cn/s/blog_4a8a07610100dcwx.html)

爲什麼有符號的TINYINT的最小值是-128?雖然“-0”也是“0”,但根據正、反、補碼體系,“-0”的補碼和“+0”是不同的,這樣就出現兩個補碼代表一個數值的情況。爲了將補碼與數字一一對應,所以人爲規定“0”一律用“+0”代表。同時爲了充分利用資源,就將原來本應該表示“-0”的補碼規定爲代表-128

發佈了31 篇原創文章 · 獲贊 15 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章