mysql中int、bigint、smallint 和 tinyint的區別與長度

經過建立一張表,來看看 mysql 中 int bigint smallint 和 tinyint的區別與長度 mysql

一、在mysql 命令行建立以下表
sql

CREATE TABLE `test_int_1` (
  `int_id` int NOT NULL,
  `bigint_id` bigint DEFAULT NULL,
  `bigint_25` bigint(25) DEFAULT NULL,
  `bigint_18` bigint(18) DEFAULT NULL,
  `int_8` int(8) DEFAULT NULL,
  `int_3` int(3) DEFAULT NULL,
  `smallint_id` smallint DEFAULT NULL,
  `tinyint_id` tinyint DEFAULT NULL,
  PRIMARY KEY (`int_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

二、desc 測試

mysql> desc test_int_1;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| int_id      | int(11)     | NO   | PRI | NULL    |       |
| bigint_id   | bigint(20)  | YES  |     | NULL    |       |
| bigint_25   | bigint(25)  | YES  |     | NULL    |       |
| bigint_18   | bigint(18)  | YES  |     | NULL    |       |
| int_8       | int(8)      | YES  |     | NULL    |       |
| int_3       | int(3)      | YES  |     | NULL    |       |
| smallint_id | smallint(6) | YES  |     | NULL    |       |
| tinyint_id  | tinyint(4)  | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
對比發現 int bigint smallint 和 tinyint 類型,若是建立新表時沒有指定 int(M) 中的M時,默認分別是 :


int             -------     int(11) spa

bigint       -------     bigint(20) 命令行

smallint   -------     smallint(6)
code

tinyint     -------     tinyint(4) class

下面是這幾種類型的取值範圍 test


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。

(關於 int(M) 的測試未完待續)

相關文章
相關標籤/搜索