1. 程式人生 > >mysql中int(1)中int後面的數字(簡單介紹)

mysql中int(1)中int後面的數字(簡單介紹)

你可能知道int(1)這個長度1並不代表允許儲存的寬度,但對這個長度也沒有真正研究過到底代表什麼。

下面連結是mysql資料型別的儲存和範圍:
http://www.runoob.com/mysql/mysql-data-types.html

我們拿int型別舉例:

int型別,佔用位元組數為 4 byte,位元組(byte)並非計算機儲存的最小單位,還有比位元組(byte)更小的單位就是 位(bit),一個 位(bit)就代表一個0或1;8個 位(bit)組成一個 位元組(byte)。
計算機儲存單位的換算:
1byte=8bit
1kb=1024byte
1m=1024kb
那麼根據int型別允許儲存的位元組數是4個位元組,就能換算出 int unsigned型別能儲存的最小值為0,最大值為4294967295(即4byte=32bit,最大值即是32個1組成)

接下來我們看看建表時的欄位長度是怎麼一回事:

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

uid欄位為例,我們這裡建的是int(3)

難道我們建了int(3),就不能存放資料1234了?

# 成功把資料1234插入
insert into `test` (`uid`) VALUES(1234);
# 甚至我們還可以存放更多位的資料
insert into `test` (`uid`) VALUES(12345);

在這裡插入圖片描述

這個int(M)我們可以簡單的理解為:
這個長度是為了告訴MYSQL資料庫,我們這個欄位的儲存的資料的寬度為M位數, 當然如果你不是M位數(只要在該型別的儲存範圍之內)MYSQL也能正常儲存。

我們把這個欄位的"屬性"修改為UNSIGNED ZEROFILL看一下效果

`uid` int(3) unsigned zerofill NOT NULL,

現在我的uid欄位:長度(M)=3, 屬性=UNSIGNED ZEROFILL(無符號,用0來填充位數)。
設定這個屬性後往表時插入資料,系統會自動把uid欄位M不夠3位的在左側用0來填充。
效果如下:

insert into `test` (`uid`) VALUES(11);

在這裡插入圖片描述

現在我們應該清楚的知道:長度M與你存放的數值型的數的大小無關.