今天一個(gè)實(shí)習(xí)生問了我一個(gè)問題进泼,他說int(3),int(4),int 有區(qū)別嗎蔗衡?
我:。乳绕。绞惦。沒關(guān)注過呀?
1. 網(wǎng)上學(xué)習(xí)
于是上網(wǎng)各種查文章洋措,總結(jié)了下面4條結(jié)論:
- int類型的字段就是占四個(gè)字節(jié)济蝉,一個(gè)字節(jié)8位,也就是4*8=32位菠发。
- int 可表示的范圍:有符號(hào)為[-2147483648王滤,2147483647],無符號(hào)為[0, 4294967295]
- 不論是選擇int(3)還是int(11)滓鸠,它在數(shù)據(jù)庫里面存儲(chǔ)的都是4個(gè)字節(jié)的長度
- 當(dāng)int(3) 配合zerofill 使用時(shí)雁乡,如果你輸入的數(shù)值是17,系統(tǒng)會(huì)默認(rèn)為你存儲(chǔ)值為017
解釋一下:這個(gè)3代表的僅是一個(gè)默認(rèn)的長度糜俗,當(dāng)不足3位時(shí)蔗怠,系統(tǒng)會(huì)幫用零補(bǔ)全,當(dāng)超過3位時(shí)吩跋,就沒有任何的影響與副作用
2. 實(shí)踐
收集好網(wǎng)上的結(jié)論后寞射,進(jìn)入了實(shí)測階段
2.1 建表
CREATE TABLE `students` (
`sId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`sInt` INT DEFAULT NULL,
`sInt_3` INT(3) ZEROFILL DEFAULT NULL,
`sInt_10` INT(10) UNSIGNED DEFAULT NULL,
`sInt_11` INT(11) ZEROFILL DEFAULT NULL,
PRIMARY KEY (`sId`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
2.2 驗(yàn)證網(wǎng)上結(jié)論
- 不用驗(yàn)證了,mysql 基礎(chǔ)
- 創(chuàng)建一行數(shù)據(jù)锌钮,寫入最大值桥温,檢查是否可以存儲(chǔ)
INSERT into students values (1,2147483647,1,1,1)
- 創(chuàng)建一行數(shù)據(jù),寫入最大值梁丘,檢查int(3)int(10)int(11)是否可以存儲(chǔ)
INSERT into students values (3,2147483647,2147483647,2147483647,2147483647)
- 創(chuàng)建一行數(shù)據(jù)侵浸,int(3),int(10), int(11) 都寫入17旺韭,檢查存儲(chǔ)結(jié)果
INSERT into students values (3,17,17,17,17)
總結(jié):
Int 后面加的數(shù)據(jù),并不會(huì)影響int的存儲(chǔ)范圍掏觉,同時(shí)int后面加了范圍后区端,需要配置zerofill 才會(huì)有效,常用于編號(hào)之中如學(xué)號(hào)之類
測試結(jié)果和網(wǎng)上說的有所不同澳腹,并沒有實(shí)現(xiàn)int(3) zerofill 后织盼,寬度就只顯示3位,而是不管設(shè)置幾酱塔,寬度都是10位沥邻,輸入的值不足10位,前面用0補(bǔ)齊
所以不知道是我mysql 版本問題還是哪里配置的問題羊娃,如果有了解的網(wǎng)友辛苦評(píng)論一把