mysql 數據庫中 int(3) 和 int(11) 有區別麼???

今天去面試的時候 面試官問到了這個問題:int(3) 和 int(11) 有什麼區別??

當時一聽有點蒙,(不知道爲什麼蒙,後來回來想想可能是覺得考官怎麼會問這麼簡單的問題呢,所以蒙了),當時我的回答是後面的數字代表的是最大能存儲的數字的位數吧,但是int類型在mysql裏面都是佔用4個字節的,不管是3位數還是11位數都是佔用4個字節。

考官聽後沒有任何的反饋信息給我,我當時還以爲回答的完全沒有問題呢,但是回來後我百思不得其解啊,爲什麼會問這麼簡單的問題呢??

然後我就google了一下,頓時發現,擦,MD 我的回答完全是自己臆想出來的。真實答案如下:


1 bytes = 8 bit ,一個字節最多可以代表的數據長度是2的8次方 11111111 在計算機中也就是-128到127


1.BIT[M]
位字段類型,M表示每個值的位數,範圍從1到64,如果M被忽略,默認爲1
2.TINYINT[(M)] [UNSIGNED] [ZEROFILL]  M默認爲4
很小的整數。帶符號的範圍是-128到127。無符號的範圍是0到255。
3. BOOL,BOOLEAN
是TINYINT(1)的同義詞。zero值被視爲假。非zero值視爲真。
4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默認爲6
小的整數。帶符號的範圍是-32768到32767。無符號的範圍是0到65535。
5.MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默認爲9
中等大小的整數。帶符號的範圍是-8388608到8388607。無符號的範圍是0到16777215。
6. INT[(M)] [UNSIGNED] [ZEROFILL]   M默認爲11
普通大小的整數。帶符號的範圍是-2147483648到2147483647。無符號的範圍是0到4294967295。
7.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默認爲20
大整數。帶符號的範圍是-9223372036854775808到9223372036854775807。無符號的範圍是0到18446744073709551615。


注意:這裏的M代表的並不是存儲在數據庫中的具體的長度,以前總是會誤以爲int(3)只能存儲3個長度的數字,int(11)就會存儲11個長度的數字,這是大錯特錯的。


其實當我們在選擇使用int的類型的時候,不論是int(3)還是int(11),它在數據庫裏面存儲的都是4個字節的長度,在使用int(3)的時候如果你輸入的是10,會默認給你存儲位010,也就是說這個3代表的是默認的一個長度,當你不足3位時,會幫你不全,當你超過3位時,就沒有任何的影響。

===================================================================================================================

mysql 數據類型及佔用字節數:

數字型所佔用的字節數如下,根據字節數即可算出表示的範圍了 


TINYINT                                    1 字節 

SMALLINT                                 2 個字節 
MEDIUMINT                              3 個字節 
INT                                           4 個字節 
INTEGER                                   4 個字節 
BIGINT                                      8 個字節 
FLOAT(X)                                  4 如果 X < = 24 或 8 如果 25 < = X < = 53 
FLOAT                                       4 個字節 
DOUBLE                                    8 個字節 
DOUBLE PRECISION                  8 個字節 
REAL                                         8 個字節 
DECIMAL(M,D)                          M字節(D+2 , 如果M < D) 
NUMERIC(M,D)                          M字節(D+2 , 如果M < D)


日期和時間類型


列類型                                     需要的存儲量 
DATE                                        3 個字節 
DATETIME                                 8 個字節 
TIMESTAMP                               4 個字節 
TIME                                         3 個字節 
YEAR                                         1 字節


字符串類型


列類型                                                需要的存儲量 
CHAR(M)                                        M字節,1 <= M <= 255 
VARCHAR(M)                                 L+1 字節, 在此L <= M和1 <= M <= 255 
TINYBLOB, TINYTEXT                     L+1 字節, 在此L< 2 ^ 8 
BLOB, TEXT                                   L+2 字節, 在此L< 2 ^ 16 
MEDIUMBLOB, MEDIUMTEXT         L+3 字節, 在此L< 2 ^ 24 
LONGBLOB, LONGTEXT                 L+4 字節, 在此L< 2 ^ 32 
ENUM('value1','value2',...)                1 或 2 個字節, 取決於枚舉值的數目(最大值65535) 
SET('value1','value2',...)                    1,2,3,4或8個字節, 取決於集合成員的數量(最多64個成員)


=================================================================================================================================

面試教訓:

1、面試過程中遇到不會的問題,如實回答,不會就是不會。

2、很多東西基礎很重要,最近要補習下各個方面的基礎知識。

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