整數類型 位元組 最小值 最大值 有符號-128 無符號0 有符號 127 無符號 255 有符號-32768 無符號0 有符號32767 無符號65535 有符號 -8388608 無符號 0 有符號 8388608 無符號1677215 有符號-2147483648 無符號0 有符號2147483 ...
- 數據類型
整數類型 |
位元組 |
最小值 |
最大值 |
TINYINT | 1 |
有符號-128 無符號0 |
有符號 127 無符號 255 |
SMALLINT | 2 |
有符號-32768 無符號0 |
有符號32767 無符號65535 |
MEDIUMINT | 3 |
有符號 -8388608 無符號 0 |
有符號 8388608 無符號1677215 |
INT | 4 |
有符號-2147483648 無符號0 |
有符號2147483647 無符號4294967295 |
BINGINT | 8 |
有符號 -9223372036854775808 無符號 0 |
有符號9223372036854775807 無符號18446744073709551615 |
浮點數類型 |
位元組 |
最小追 |
最大值 |
FLOAT | 4 |
-+1.175494351E-38 |
-+3.402823466E+38 |
DOUBLE | 8 |
-+2.2250738585072014E-308 |
-+1.7976931348623157E+308 |
定點數類型 |
位元組 |
描述 |
|
DECIMAL(M,D) | M+2 |
最大取值範圍與DOUBLE相同,給定DECIMAL的有效值範圍由M和D決定
|
|
位類型 |
位元組 |
最小值 |
最大值 |
BIT(M) | 1~8 |
BIT(1) |
BIT(64) |
對於整數類型,Mysql支持類型名臣後面的小括弧內指定顯示寬度,例如int(5),當數值寬度小於5位的時候在數字前面填滿寬度,一般配合zerofill使用。
(zerofill就是 ‘0’填充的意思,在數字位數不夠的空間用字元0填滿)。
如果插入的值大於寬度限制會不會報錯?
答:不會對插入的數據有任何影響,還是會按照類型的實際精度進行保存,所有的整數類型都有一個可選屬性UNSIGNED(無符號),如果要在欄位裡面保存非負數或者需要較大的上限值時,可以用此選項,他的取值範圍下限取0,上限取原值的2倍。
另外,整數類型還有一個屬性,AUTO_INCREMENT(自動增長),在需要產生唯一標識或順序時,可用這個屬性,只作用於整數類型,值一般從1開始,通常用在主鍵(PRIMARY KEY)上
註:mysql中數值類型基本就是這些,在選擇數據類型的時候要根據應用時機發生的情況確定其取值範圍,最後根據確定的結果慎重選擇數據類型。
對於小數的表示,Mysql分為定點型和浮點型:
浮點型包括float(單精度)和double(雙精度),而定點數則只有decimal一種表示,定點數在Mysql內部以字元串的形式存放,比浮點數更精確,適用於貨幣等精度高的數據
float,double,decimal三者之間的區別?
創建一張表分別定義
分別往id1,id2,id3中插入 1.23
在向id1,id2欄位插入1.234,而id3中仍然插入1.23
可以看出,其中id1和id2由於標度的限制,捨去了最後一位,數據變成1.23
接著同時向id1,id2,id3欄位中插入數據1.234
此時發現,數據都插入進去了,但是報了一個warning錯誤,id3這個記錄是不能插入的,跟數據校檢有關,涉及到sql mode的知識,之後在講
將表中的精度和標度都去掉,這次插入1.234
插入數據
可以發現,id1和id2欄位可以正常插入數據,id3小數位被截斷了,所以可以看出,浮點數如果不寫精度和標度,則會按實際情況顯示值,如果有精度和標度,則會四捨五入
定點數如果不寫精度和標度,則會按系統預設值decimal(10,0)來進行操作,如果數超過精度和標度會報錯
對於BIT類型,用於存放位欄位值,BIT(M)可以存放多為二進位數,M範圍1~64,如果不寫則預設1,對於位欄位,直接使用select命令不會看到結果,可以用bin()(顯示二進位格式)或者hex()(顯示十六進位格式)函數進行讀取
用bin()和hex()函數: