首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >int(1) 和 int(10) 有什么区别?

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

作者头像
闻说社
发布2025-02-10 16:19:22
发布2025-02-10 16:19:22
2190
举报

引言

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

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

代码语言:javascript
复制
 代码解读复制代码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),我来插入一个最大值看看。

代码语言:javascript
复制
sql 代码解读复制代码mysql> INSERT INTO `user` (`userId`) VALUES (4294967295);
image.png
image.png

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

使用0来作为填充

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

代码语言:javascript
复制
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,我们先来插入条数据。

代码语言:javascript
复制
scss 代码解读复制代码mysql> INSERT INTO `user` (`userId`) VALUES (1),(10),(100),(1000);
image.png
image.png

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

代码语言:javascript
复制
sql 代码解读复制代码mysql> select * from user;
image.png
image.png

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

总结

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

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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
    • 使用0来作为填充
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档