mysql中int、bigint、smallint和tinyint的區別與長度
通過創建一張表,來看看 mysql 中 int bigint smallint 和 tinyint的區別與長度
www.2cto.com
1、在mysql 命令行創建如下表
01
CREATE TABLE `test_int_1` (
02
`int_id` int NOT NULL,
03
`bigint_id` bigint DEFAULT NULL,
04
`bigint_25` bigint(25) DEFAULT NULL,
05
`bigint_18` bigint(18) DEFAULT NULL,
06
`int_8` int(8) DEFAULT NULL,
07
`int_3` int(3) DEFAULT NULL,
08
`smallint_id` smallint DEFAULT NULL,
09
`tinyint_id` tinyint DEFAULT NULL,
10
PRIMARY KEY (`int_id`)
11
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2、desc
01
mysql> desc test_int_1;
02
+-------------+-------------+------+-----+---------+-------+
03
| Field | Type | Null | Key | Default | Extra |
04
+-------------+-------------+------+-----+---------+-------+
05
| int_id | int(11) | NO | PRI | NULL | |
06
| bigint_id | bigint(20) | YES | | NULL | |
07
| bigint_25 | bigint(25) | YES | | NULL | |
08
| bigint_18 | bigint(18) | YES | | NULL | |
09
| int_8 | int(8) | YES | | NULL | |
10
| int_3 | int(3) | YES | | NULL | |
11
| smallint_id | smallint(6) | YES | | NULL | |
12
| tinyint_id | tinyint(4) | YES | | NULL | |
13
+-------------+-------------+------+-----+---------+-------+
14
8 rows in set (0.00 sec)
對比發現 int bigint smallint 和 tinyint 類型,如果創建新表時沒有指定 int(M) 中的M時,默認分別是 :
int ------- int(11)
bigint ------- bigint(20)
smallint ------- smallint(6)
tinyint ------- tinyint(4)
下面是這幾種類型的取值范圍
MySQL還支持選擇在該類型關鍵字後面的括號內指定整數值的顯示寬度(例如,INT(4))。int(M) 在 integer 數據類型中,M 表示最大顯示寬度,該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。
顯示寬度並不限制可以在列內保存的值的范圍,也不限制超過列的指定寬度的值的顯示。
在 int(M) 中,M 的值跟 int(M) 所占多少存儲空間並無任何關系。和數字位數也無關系, int(3)、int(4)、
int(8) 在磁盤上都是占用 4 btyes 的存儲空間。
當結合可選擴展屬性ZEROFILL使用時, 默認補充的空格用零代替。例如,對於聲明為INT(5) ZEROFILL的列,
值4檢索為00004。
bigint 用於某些特殊的情況,當整數值超過 int 數據類型支持的范圍時,就可以采用 bigint。