關於MySQL INT型別長度的疑惑
-
疑惑一:int長度預設為11?
-
疑惑二:int(x),x是代表數值長度?如果插入一條記錄為9位數值到int(4)型別的欄位中,插入操作能否成功?如果插入操作成功,查詢出來的值是多少?
每種整數型別所需的儲存空間和範圍 [官方文件:https://dev.mysql.com/doc/refman/5.7/en/integer-types.html
[參考:https://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes]
ype | Storage (Bytes) | Minimum Value Signed | Minimum Value Unsigned | Maximum Value Signed | Maximum Value Unsigned |
---|---|---|---|---|---|
TINYINT |
1 | -128 |
0 |
127 |
255 |
SMALLINT |
2 | -32768 |
0 |
32767 |
65535 |
MEDIUMINT |
3 | -8388608 |
0 |
8388607 |
16777215 |
INT |
4 | -2147483648 |
0 |
2147483647 |
4294967295 |
BIGINT |
8 | -263 |
0 |
263-1 |
264-1 |
從上表可以看出INT是佔4個位元組大小,4Bytes -> 4 * 8 Bit ,通過換算,可以得出可以儲存一個有符號的值 -2147483648 ~ 2147483647,無符號的值 0 ~ 4294967295;對於有符號的值的長度是11位,對於無符號的值的長度是10位,多的那個一位是符號位,當使用有符號展示的整數列寬頻為11位,當使用無符號展示的整數列寬頻位10位;
MySQL 支援用括號包含的數字指定整數資料型別的顯示寬度, 比如INT(4)
指定INT
顯示寬度為四位數,應用程式可以使用此可選的顯示寬度來顯示整數值,當該整數值的寬度小於為列指定的寬度,可用空格填充它們;
顯示寬度也沒有限制,可以被儲存在列中的值的範圍內,也不會阻止寬於列顯示寬度的值正確顯示。例如,指定為的列SMALLINT(3)
具有通常SMALLINT
的-32768-
32767
,並且超過三位的數字將完整顯示三位數字所允許的範圍之外的值;
如果配合ZEROFILL
屬性, 將用0
來補齊. 比如INT(4) ZEROFILL
欄位, 數字5
會被儲存為0005;
[參考:https://stackoverflow.com/questions/8892341/what-does-int5-in-mysql-mean]
除非列是UNSIGNED ZEROFILL,否則整數型別的列的顯示寬度實際上不會執行任何操作;
建立一張zerofill_demo測試
CREATE TABLE zerofill_demo ( id INT(11) NOT NULL AUTO_INCREMENT, a INT(11) NOT NULL, b INT(11) UNSIGNED ZEROFILL NOT NULL, c INT(5) DEFAULT NULL, d INT(5) UNSIGNED ZEROFILL NOT NULL, e INT(15) DEFAULT NULL, PRIMARY KEY (`id`) ); INSERT INTO zerofill_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1); INSERT INTO zerofill_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
參考:
https://www.jianshu.com/p/61293b416335