1.介紹
Integer型別,即整數型別,MySQL支持的整數型別有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,
1.1 空間和范圍
每種整數型別所需的存盤空間和范圍如下:
型別 |
位元組 |
最小值 (有符號) |
最大值 (有符號) |
最小值 (無符號) |
最大值 (無符號) |
TINYINT |
1 | -128 |
127 |
0 |
255 |
SMALLINT |
2 | -32768 |
32767 |
0 |
65535 |
MEDIUMINT |
3 | -8388608 |
8388607 |
0 |
16777215 |
INT |
4 | -2147483648 |
2147483647 |
0 |
4294967295 |
BIGINT |
8 |
|
|
0 |
|
2. INT(11)
2.1 數字是否限制長度?
id INT(11) NOT NULL AUTO_INCREMENT,
在一些建表陳述句會出現上面 int(11) 的型別,那么其代表什么意思呢?
對于Integer型別括號中的數字稱為欄位的顯示寬度,這與其他型別欄位的含義不同,對于DECIMAL型別,表示數字的總數,對于字符欄位,這是可以存盤的最大字符數,例如VARCHAR(20)可以存盤20個字符,
顯示寬度并不影響可以存盤在該列中的最大值,INT(5) 和 INT(11)可以存盤相同的最大值,哪怕設定成 INT(20) 并不意味著將能夠存盤20位數字(BIGINT),該列還是只能存盤INT的最大值,
示例
創建一個臨時表:
CREATE TEMPORARY TABLE demo_a ( id INT(11) NOT NULL AUTO_INCREMENT, a INT(1) NOT NULL, b INT(5) NOT NULL, PRIMARY KEY (`id`) )
插入超過"長度"的數字:
INSERT INTO demo_a(a,b) VALUES(255, 88888888);
查看結果:發現數字并不是設定長度
mysql> SELECT * FROM demo_a; +----+-----+----------+ | id | a | b | +----+-----+----------+ | 1 | 255 | 88888888 | +----+-----+----------+ 1 row in set (0.03 sec)
2.2 數字表達什么意思?
當列設定為UNSIGNED ZEROFILL時,INT(11)才有意義,其表示的意思為如果要存盤的數字少于11個字符,則這些數字將在左側補零,
注意:ZEROFILL默認的列為無符號,因此不能存盤負數,
示例
創建一個臨時表:b列設定為UNSIGNED ZEROFILL
CREATE TEMPORARY TABLE demo_a ( id INT(11) NOT NULL AUTO_INCREMENT, a INT(11) NOT NULL, b INT(11) UNSIGNED ZEROFILL NOT NULL, PRIMARY KEY (`id`) );
插入數值:
INSERT INTO demo_a(a,b) VALUES(1, 1);
結果:b列的左側使用了0填充長度
mysql> SELECT * FROM demo_a; +----+---+-------------+ | id | a | b | +----+---+-------------+ | 1 | 1 | 00000000001 | +----+---+-------------+ 1 row in set (0.18 sec)
3. 參考資料
Integer型別:https://dev.mysql.com/doc/refman/5.6/en/integer-types.html
What does int(11) means in MySQL?:https://www.virendrachandak.com/techtalk/mysql-int11-what-does-it-means/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/70579.html
標籤:MySQL
下一篇:MySQL 聚集索引和二級索引
