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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 在MySQL中,`int`类型后面的数字(如`int(1)`、`int(10)`)并不影响其存储范围,最大值仍为4294967295(无符号)。这些数字只有在配合`zerofill`使用时才有意义,用于显示时不足位数补0。例如,`int(4) zerofill`会将1显示为0001。这适用于需要固定长度编号的场景,如学号等。

引言

我们有时候在面试的时候,面试官会问到有关数据库的相关问题,有时就会被问到:在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后面的数字,不影响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);

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

sql

代码解读

复制代码

mysql> select * from user;

通过查询刚刚插入的数据可以发现 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
Java int和Integer的区别
本文介绍了Java中int与Integer的区别及==与equals的比较机制。Integer是int的包装类,支持null值。使用==比较时,int直接比较数值,而Integer比较对象地址;在-128至127范围内的Integer值可缓存,超出该范围或使用new创建时则返回不同对象。equals方法则始终比较实际数值。
|
6月前
|
linux syscall和int 80的区别
通过以上内容,希望您能更清晰地理解 `int 0x80` 和 `syscall` 的区别及其在不同系统架构中的应用。
397 99
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
Java的Integer和int有什么区别?
Java的Integer和int有什么区别?
173 1
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
127 0
const int *和int * const的区别【C语言/指针】
const int *和int * const的区别【C语言/指针】
170 0
const int*p 与 int const *p与 int * const p与const int * const p的区别(有明显对比,超级详细,超级好记)
当只有一个const并且const在*左边时: (const int*p 与 int const *p,)*p的值不能改,但是p(地址)能改.我们可以看到第一,三张图片第五行*p下面有红线表示错误.而第二,四张没有红线的地方表示正确.所以我们可知道const int*p 与 int const *p是相同的只是书写方法不同.
219 0

热门文章

最新文章