Mysql:int int(3) int(10) 的區(qū)別

今天一個實(shí)習(xí)生問了我一個問題,他說int(3),int(4),int 有區(qū)別嗎?
我:。。。沒關(guān)注過呀?

1. 網(wǎng)上學(xué)習(xí)

于是上網(wǎng)各種查文章,總結(jié)了下面4條結(jié)論:

  1. int類型的字段就是占四個字節(jié),一個字節(jié)8位,也就是4*8=32位。
  2. int 可表示的范圍:有符號為[-2147483648,2147483647],無符號為[0, 4294967295]
  3. 不論是選擇int(3)還是int(11),它在數(shù)據(jù)庫里面存儲的都是4個字節(jié)的長度
  4. 當(dāng)int(3) 配合zerofill 使用時(shí),如果你輸入的數(shù)值是17,系統(tǒng)會默認(rèn)為你存儲值為017
    解釋一下:這個3代表的僅是一個默認(rèn)的長度,當(dāng)不足3位時(shí),系統(tǒng)會幫用零補(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é)論

  1. 不用驗(yàn)證了,mysql 基礎(chǔ)
  2. 創(chuàng)建一行數(shù)據(jù),寫入最大值,檢查是否可以存儲
INSERT into students values (1,2147483647,1,1,1)
image.png
  1. 創(chuàng)建一行數(shù)據(jù),寫入最大值,檢查int(3)int(10)int(11)是否可以存儲
INSERT into students values (3,2147483647,2147483647,2147483647,2147483647)
image.png
  1. 創(chuàng)建一行數(shù)據(jù),int(3),int(10), int(11) 都寫入17,檢查存儲結(jié)果
INSERT into students values (3,17,17,17,17)
image.png

總結(jié):

  1. Int 后面加的數(shù)據(jù),并不會影響int的存儲范圍,同時(shí)int后面加了范圍后,需要配置zerofill 才會有效,常用于編號之中如學(xué)號之類

  2. 測試結(jié)果和網(wǎng)上說的有所不同,并沒有實(shí)現(xiàn)int(3) zerofill 后,寬度就只顯示3位,而是不管設(shè)置幾,寬度都是10位,輸入的值不足10位,前面用0補(bǔ)齊

  3. 所以不知道是我mysql 版本問題還是哪里配置的問題,如果有了解的網(wǎng)友辛苦評論一把

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容