int(1) 和 int(10) 有什么区别?

代码纪元 后端 2025-02-10

int(1) 和 int(10) 有什么区别?

引言

我们有时候在面试的时候,面试官会问到有关数据库的相关问题,有时就会被问到:在mysql中创建一个表,有个id的字段为int类型,那么这个int后面的数字有什么作用么,这个数字会不会就是字段设置上限值得时候使用的呢,int(1) 和 int(10) 有什么区别?下面我们就来创建一个user表,来看一看这两有什么区别:

我们知道在mysql中 int占4个字节,那么对于无符号的int,最大值是2^32-1 = 4294967295,将近40亿,难道用了int(1),就不能达到这个最大值吗? 代码解读

复制代码
CREATE TABLE `user` ( `userId` int(1) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`userId`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

userId字段为无符号的int(1),我来插入一个最大值看看。sql

代码解读
复制代码
mysql> INSERT INTO `user` (`userId`) VALUES (4294967295);

int(1) 和 int(10) 有什么区别?

我们可以看到这条数据是成功插入了,说明int后面的数字,不影响int本身支持的大小,int(1)、和int(10)实际上是没什么区别的。

使用0来作为填充

int后面的数字实际上是配合zerofill一起使用才有效。我们来看一个例子:sql

代码解读
复制代码
CREATE TABLE `user` ( `userId` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT, PRIMARY KEY (`userId`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

注意int(4)后面加了个zerofill,我们先来插入条数据。scss

代码解读
复制代码
mysql> INSERT INTO `user` (`userId`) VALUES (1),(10),(100),(1000);

int(1) 和 int(10) 有什么区别?

分别成功插入了userId = 1、10、100、1000 4条数据,然后我们来查询下:sql

代码解读
复制代码
mysql> select * from user;

int(1) 和 int(10) 有什么区别?

通过查询刚刚插入的数据可以发现 int(4) + zerofill实现了不足4位补0的现象,但不使用zerofill int(4)是没有用的。而且对于0001这种,数据库底层存储的还是1,只是在展示的会补0。

总结

int后面的数字不能表示字段的长度,int(1)和int(10)是没有区别的,但当int(num)一般加上zerofill,才有效果。

zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,这样可以很直观的表示数据,方便处理而且还更加美观。

转载来源:https://juejin.cn/post/7220299565005520955

Apipost 私有化火热进行中

评论