MySQL中的int(11)含义

今天在建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取多少还是根据具体情况而定。

posted @ 2020-10-14 19:01  学渣很忙  阅读(3774)  评论(0编辑  收藏  举报