mysql中int(1)中int後面的數字(簡單介紹)
阿新 • • 發佈:2018-12-02
你可能知道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與你存放的數值型的數的大小無關.