天天看點

Mysql的int類型探究

最近被問到了這個問題,原題目應該是mysql的int(1)和int(10)有什麼差別。當時沒答好,也确實沒注意過,故在此研究記錄下。

mysql中int所能設定的長度範圍是1~255。當你輸入小于1的數字的時候,會自動給你置為11。當你輸入的數值是大于255的時候,會提示你最大為255。

但是實際上你設定多少是沒有差別的,效果和int(11)是一摸一樣的。你設定一個int(1),你以為隻能存儲0~9,其實不然,他可以存儲最多11位數字。存儲的範圍是-2147483648 ~ 2147483647。

那麼int後面指定的數組到底是什麼作用呢,隻有在加入zerofill的時候,才能看出效果。如果你的int設定為int(4),當你存儲1的時候,那麼展示的就是0001。

由此看出結論,int後面代表的是寬度。實際占用空間永遠為4位元組。

需要注意的是,不要用navicat進行探究,navicat看不出效果,用控制台才可以。

mysql的int的數字隻是為了展示長度用的,float的數字才會限制實際的資料範圍,比如 float(3,2) 隻能夠寫入 0.00~999.99.

MySQL的 int 和 tinyint 的預設長度是 int(11) 和 tinyint(4), 而boolean 型實際存儲的是 tinyint(1).

Mysql的int類型探究

上述表格中的數值類型都是定長的,也就是說,無論你存的數值是多少,多大或者多小,占用的位元組大小都是固定的。例如,之前設定的int(1),雖然M值是1個字元,但是它所占用的空間大小永遠都是4個位元組的大小,換句話說就是,你可以存入有符号整型從-2 147 483 648到2 147 483 647包括這兩個數的中間任何一個數。int(1)和int(11)占用的是4個位元組,可以存入上述這些數,tinyint(1)和tinyint(4)占用的是1個位元組,可以存入從-128到127的數,這也是為什麼之前的一次試驗,int(1)插入128成功,而tinyint(1)插入128卻提示超出長度。

除了bigdeciaml,其他的長度最大都是255。bigdecimal如下

Mysql的int類型探究

繼續閱讀