今天一個(gè)實(shí)習(xí)生問(wèn)了我一個(gè)問(wèn)題,他說(shuō)int(3),int(4),int 有區(qū)別嗎?
我:。。。沒(méi)關(guān)注過(guò)呀?
1. 網(wǎng)上學(xué)習(xí)
于是上網(wǎng)各種查文章,總結(jié)了下面4條結(jié)論:
- int類(lèi)型的字段就是占四個(gè)字節(jié),一個(gè)字節(jié)8位,也就是4*8=32位。
- int 可表示的范圍:有符號(hào)為[-2147483648,2147483647],無(wú)符號(hào)為[0, 4294967295]
- 不論是選擇int(3)還是int(11),它在數(shù)據(jù)庫(kù)里面存儲(chǔ)的都是4個(gè)字節(jié)的長(zhǎng)度
- 當(dāng)int(3) 配合zerofill 使用時(shí),如果你輸入的數(shù)值是17,系統(tǒng)會(huì)默認(rèn)為你存儲(chǔ)值為017
解釋一下:這個(gè)3代表的僅是一個(gè)默認(rèn)的長(zhǎng)度,當(dāng)不足3位時(shí),系統(tǒng)會(huì)幫用零補(bǔ)全,當(dāng)超過(guò)3位時(shí),就沒(méi)有任何的影響與副作用
2. 實(shí)踐
收集好網(wǎng)上的結(jié)論后,進(jìn)入了實(shí)測(cè)階段
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ù),寫(xiě)入最大值,檢查是否可以存儲(chǔ)
INSERT into students values (1,2147483647,1,1,1)

image.png
- 創(chuàng)建一行數(shù)據(jù),寫(xiě)入最大值,檢查int(3)int(10)int(11)是否可以存儲(chǔ)
INSERT into students values (3,2147483647,2147483647,2147483647,2147483647)

image.png
- 創(chuàng)建一行數(shù)據(jù),int(3),int(10), int(11) 都寫(xiě)入17,檢查存儲(chǔ)結(jié)果
INSERT into students values (3,17,17,17,17)

image.png
總結(jié):
Int 后面加的數(shù)據(jù),并不會(huì)影響int的存儲(chǔ)范圍,同時(shí)int后面加了范圍后,需要配置zerofill 才會(huì)有效,常用于編號(hào)之中如學(xué)號(hào)之類(lèi)
測(cè)試結(jié)果和網(wǎng)上說(shuō)的有所不同,并沒(méi)有實(shí)現(xiàn)int(3) zerofill 后,寬度就只顯示3位,而是不管設(shè)置幾,寬度都是10位,輸入的值不足10位,前面用0補(bǔ)齊
所以不知道是我mysql 版本問(wèn)題還是哪里配置的問(wèn)題,如果有了解的網(wǎng)友辛苦評(píng)論一把