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

  • 相关阅读:
    linux 查看安装软件位置(持续跟新)
    POJ 3661 Running (DP思想)
    stringstream的用法
    关于实验室搬家
    POJ 搜索(2)
    Treap的插入删除实现
    碰到一道不错的扩展欧几里德题目 whu 1338
    SRM 144
    关于无向图双连通问题
    POJ 动态规划(2)
  • 原文地址:https://www.cnblogs.com/xzhm/p/13816646.html
Copyright © 2020-2023  润新知