類型 | 字節(jié) | 最大值 | 最小值 |
---|---|---|---|
(帶負(fù)號的/無負(fù)號的) | (帶負(fù)號的/無負(fù)號的) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 63335 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
說明:
整數(shù)類型后面跟的是顯示的寬度。M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲大小或類型包含的值的范圍無關(guān)霹疫。
1.創(chuàng)建表
mysql> create table int_test(a int(1) unsigned not null,
b int,c int(20) unsigned zerofill);
Query OK, 0 rows affected (0.01 sec)
mysql> show create table int_test;
+----------+-------------------------------
-------------------------------------------
| Table | Create Table
+----------+-------------------------------
-------------------------------------------
| int_test | CREATE TABLE `int_test` (
`a` int(1) unsigned NOT NULL,
`b` int(11) DEFAULT NULL,
`c` int(20) unsigned zerofill DEFAULT NUL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+-------------------------------
-------------------------------------------
1 row in set (0.00 sec)
mysql>
2.插入數(shù)據(jù)
mysql> insert into int_test values(23,99999,123456789);
Query OK, 1 row affected (0.01 sec)
mysql> select * from int_test;
+----+-------+----------------------+
| a | b | c |
+----+-------+----------------------+
| 23 | 99999 | 00000000000123456789 |
+----+-------+----------------------+
1 row in set (0.00 sec)
注意:
int(M),
這里的M代表的并不是存儲在數(shù)據(jù)庫中的具體的長度拱绑,以前總是會誤以為int(1)只能存儲1個(gè)長度的數(shù)字综芥,int(20)就會存儲20個(gè)長度的數(shù)字,這是大錯特錯的猎拨。
tinyint(1) 和 tinyint(20) 中的1和20并不表示存儲長度膀藐,只有字段指定zerofill是有用,
如tinyint(20)红省,如果實(shí)際值是123456789额各,如果列指定了zerofill,查詢結(jié)果就是00000000000123456789吧恃,左邊用0來填充虾啦。
補(bǔ)充(char和varchar的區(qū)別):
char是一種固定長度的類型,varchar則是一種可變長度的類型痕寓,它們的區(qū)別是:
char(M)類型的數(shù)據(jù)列里傲醉,每個(gè)值都占用M個(gè)字節(jié),如果某個(gè)長度小于M呻率,MySQL就會在它的右邊用空格字符補(bǔ)足硬毕。(在檢索操作中那些填補(bǔ)出來的空格字符將被去掉)
在varchar(M)類型的數(shù)據(jù)列里,每個(gè)值只占用剛好夠用的字節(jié)再加上一個(gè)用來記錄其長度的字節(jié)(即總長度為L+1字節(jié))