首页 > 数据库技术 > 详细

MySQL中的int(11)含义

时间:2020-10-14 22:44:09      阅读:36      评论:0      收藏:0      [点我收藏+]

今天在建MySQL表的时候突然想弄清楚

  • int(11)的含义。
  • 为什么括号中的数字大多数情况都是11而不是其他数字。

int(11)的含义

0、先建一张表,顺便插入一些数值

create table `account`(
  `id` int(3)
)engine = innodb default charset=utf8;

insert into `account`(`id`) values(12);
select * from `account`;

1、然后我们看看此时表的结构和表中数据

技术分享图片

技术分享图片

2、将【Zerofill】勾选上,看看表中数据

技术分享图片
图中的数据刚好展示了3位,和我们的int(3)中的3符合。

3、改变表中的int(n)中n的值,并保持zerofill勾选,看结果

alter table `account` change `id` `id` int(5) zerofill;

技术分享图片
图中数据展示了5位,和int(n)中n的值的位数是一样的

4、如果现在插入超过int(n)中n位数的数据(比如说6位数)呢?数据会不会丢失?

insert into `account`(`id`) values(123456);
select * from `account`;

技术分享图片
答案是:依然会展示插入的数据,不会丢失数据

5、如果插入超过int类型的上限的数呢?

我们知道MySQL中的int是占4个字节,每个字节8位,一共就是32位。
而且上面勾选了【Unsigned】,也就是无符号数,那么int的取值最大就可以取到
2^32 - 1 = 4294967295
,我们把这个值插进去看看结果

insert into `account`(`id`) values(4294967295);
insert into `account`(`id`) values(4294967296);

技术分享图片
技术分享图片

6、结论

通过以上几点,我们可以推断:

- int(n)中的n就是数据展示的位数(长度)。但是这样说不够精确:

1. 在没开启【zerofill】的情况下,不管是几位数,只要不超过int类型的上限,都直接显示数据。

2. 在开启【zerofill】的情况下,n的数值是展示的数据的位数的下限。位数不够n位数,则高位补0;位数够了也不会损失数据,直接显示插入的数据。

3. 超过int类型上限的数是无法插入数据库表中的。

为什么括号中的数字大多数情况都是11而不是其他数字?

因为int类型的数据上限是2^32 - 1 = 4294967295,这个数值刚好10位数,超过这个数值的数无法插入数据库表中,自然也就无法展示,所以选择超过10的n值就没有太大意义。

所以我们选择11位的展示长度肯定是够用了,(实际上写10就够用的),除此之外可能就是习惯了,但是具体的n取多少还是根据具体情况而定。

MySQL中的int(11)含义

原文:https://www.cnblogs.com/xzhm/p/13816646.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!