1.起因
為什么想起來看這個問題,是最近有同事問mysql的init類型的字段長度的問題,他問int(1)和int(10)是什么意思,是字段長度越大,能存儲的數字越大么?咋一問,還有點懵,從慣性思維來看,確實應該是這樣。那么,實際情況是什么樣的呢?這里直接通過實驗來試一下。
2.設置int類型的長度為1
CREATE TABLE `t_student` (`id` int(1) NOT NULL AUTO_INCREMENT COMMENT 'ID編號',`name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '學生姓名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
然后插入一條數據:
INSERT INTO t_student values(1000001,'張三');
竟然能夠插入成功。
3. 設置int類型的長度為10,并且加入zerofill參數
CREATE TABLE `t_supder_student` (`id` int(10) zerofill NOT NULL AUTO_INCREMENT COMMENT 'ID編號',`name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '學生姓名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
然后插入一條數據
INSERT INTO t_supder_student values(1,'李四');
我們可以看到,雖然我們插入的是1,但是顯示的是1前面補充了9個0,到現在我似乎就明白了,int類型的長度不是指的能存多大的數據,而是在與zerofill聯合使用的時候,可以進行0填充。
4.注意事項
以上的示例都是在MySQL Workbench上操作的。對于navcat或者其他一些客戶端,查詢顯示的時候,會把補充的0給去掉,導致看不到真實的效果。
5.小結
int后面的數字不能表示字段的長度,int(num)一般加上zerofill,才有效果。