MySQL數據類型--整數類型

OK,現在我們開始研究MySQL的數據類型。MySQL提供了多種數據類型,其中包括整數類型,浮點數類型,定點數類型,日期和時間類型,字符串類型和二進制數據類型。

  • mysql支持的所有的數據類型


不同的數據類型有各自的類型,使用範圍也不相同。而且,存儲方式也不相同。下圖是一份完整的MySQL支持的所有的數據類型。



  • OK,現在我們來先看下整數類型。


整數類型是數據庫中最基本的數據類型,標準sql中支持integer和smallint這兩類整數類型。MySQL數據庫除了支持這兩種類型以外,還擴展支持了tinyint,mediumint和bigint。
整理這一系列博客,我們要知道各種整數類型的取值範圍,存儲的字節數,特點等等。具體如下圖:


關於上圖解釋:

1,int類型和integer類型的字節數和取值範圍是一樣的,其實在MySQL中int類型和integer類型是一樣的。

2,tinyint類型佔用的字節最小,只需要一個字節。取值範圍也是最小的。

3,bigint類型佔用的字節最大,需要8個字節。氣質範圍是最大的。

4,不同類型的整數類型的字節數不同,根據類型所佔的字節數可以算出該類型的取值範圍。比如intyint的空間是一個字節,一個字節是8位。那麼
tinyint無符號數的最大值就是2的8次-1,也就是255。
tinyint有符號數的最大值就是2的7次-1,也就是127。

5,MySQL支持數據類型的名稱後面指定該類型的顯示寬度,其基本形式如下:數據類型(顯示寬度)

關於這點要注意:數據類型參數是整數數據類型的名稱,顯示寬度參數是指定寬度的數值。顯示寬度是指能夠顯示的最大數據的長度。比如int(4)就是指定int類型的顯示寬度是4。


OK,現在我們來實際的操作下整數相關的數據類型。

  • 整數類型默認的顯示寬度:


關於上圖我們仔細觀察就會發現規律,每個整數類型的默認顯示狂賭與其有符號數的最小值的顯示寬度相同。因爲次數負號是佔一個位置的。如果是正數的話一個整數的數據類型的默認顯示寬度剛好能顯示該數據類型的所有值。

這裏來舉一個例子,tinyint類型的取值範圍是-128~127,那麼tinyint默認顯示寬度就是4。int類型的最大值10位,所以int的默認顯示寬度就是11。

注意:數據的寬度不能大於默認寬度,如果大於默認寬度,那該數據已經超過了該類型的最大值。因爲最大值的寬度必須是小於等於默認寬度。如果一個值大於了這個類型的最大值,那麼這個值是不可能插入的。但是很遺憾的是我自己過了下,插入是可以插入進去的,但是設值成了該字段的最大值。比如tinyint unsigned最大值255,我們插入300的話數據庫中字段轉換成255保存了。



  • unsigned,zerofill,auto_increment屬性:


OK,現在在這裏重點介紹下3個屬性:

1,unsigned。既爲非負數,用此類型可以增加數據長度。例如如果tinyint最大是127,那tinyint unsigned最大就可以到127 * 2。例如:int類型的整數,有符號值:-128到127,無符號值:0到255。

2,zerofill。該屬性參數表示數字不足的顯示空間由0來填補。值得注意的是使用zerofill參數時,MySQL會自動加上unsinged屬性。那麼該整數類型只能表示無符號數,其顯示寬度比默認寬度小1。

3,整數類型還有一個auto_increment屬性,該屬性可是使字段成爲自增字段,具有該屬性的字段,在插入新的記錄時,該字段的值都會在前一條記錄的基礎上1。所以這個時候就不用人爲的設值了呢,一般用來主鍵的設置上該屬性。

比如我們現在見表語句如下:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` tinyint(4) unsigned zerofill DEFAULT NULL,
  `b` smallint(6) unsigned DEFAULT NULL,
  `c` mediumint(9) DEFAULT NULL,
  `d` int(11) DEFAULT NULL,
  `e` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

現在我們往該表中插入的a的值只能是正數,如果是負數的話轉換成0000(自動用0補齊顯示),往表中插入的b的值只能是正數,如果是負數的話轉換成0,往表中插入的主鍵不用設值,默認從0開始加一插入,當然我們也可以人工設值。

現在我隨便插入了幾條數據,插入的sql如下,然後顯示的結果如下:

INSERT INTO `linkinframe`.`test` (`a`, `b`, `c`, `d`, `e`) VALUES ('1', '1', '1', '1', '1');
INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`, `c`, `d`, `e`) VALUES ('3', '-1', '-1', '1', '1', '1');
INSERT INTO `linkinframe`.`test` (`a`, `b`, `c`, `d`, `e`) VALUES ('333', '333', '333', '333', '333');
 關於該視圖的解釋:a 使用zerofill,所以非負,b 使用unsigned,所以非負,id主鍵 auto_increment,所以自增。


  • 總結:

字段選擇哪個整數類型,取決於該字段的範圍。如果字段的最大值不超過255,那麼選擇tinyint類型就足夠了。取值很大的時候,根據最大值的範圍選擇int或者bigint類型。比較常用的整數類型是int類型。


發佈了284 篇原創文章 · 獲贊 66 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章