• MySQL int(11)及int(M)解析


    默认创建int类型的字段,SHOW CREATE TABLE table_name或DESC table_name常常可以看到其默认情况为int(11)。

    这个int(M)很多时候都会被误解为最大范围,但是并不是这样的,int的范围是早已已经被指定好了的,并且无符号int的最大上限值为2^32-1。

    做个实验:

    mysql> CREATE TABLE a(id int(2));
    Query OK, 0 rows affected (0.39 sec)
    
    mysql> INSERT INTO a SELECT 3333;
    Query OK, 1 row affected (0.03 sec)
    Records: 1 Duplicates: 0 Warnings: 0
    
    mysql> DESC a;
    +-------+--------+------+-----+---------+-------+
    | Field  | Type   | Null | Key | Default  | Extra |
    +-------+--------+------+-----+---------+-------+
    | id    | int(2)  | YES  |      | NULL     |       |
    +-------+--------+------+-----+---------+-------+
    1 row in set (0.00 sec)
    
    mysql> SELECT * FROM a;
    +------+
    | id   |
    +------+
    | 3333 |
    +------+
    1 row in set (0.00 sec)

    可以很轻易的看出这样写是没有任何问题的。



    那么int(M)是干什么用的呢?

    其实在创建int类型的字段时,可以添加一个ZEROFILL的值。
    当然该约束可以用于不仅仅是int的整型数据,还可以用于其他的四种类型的整型数据。(此处拿int做例子)

    ZEROFILL的作用是,根据整型数据类型提供的宽度,自动补零。
    比如:

    mysql> CREATE TABLE b(id int ZEROFILL);
    Query OK, 0 rows affected (0.28 sec)
    
    mysql> DESC b;
    +-------+---------------------------+------+-----+---------+-------+
    | Field  | Type                      | Null | Key | Default  | Extra |
    +-------+---------------------------+------+-----+---------+-------+
    | id    | int(10) unsigned zerofill  | YES |      | NULL    |        |
    +-------+---------------------------+------+-----+---------+-------+
    1 row in set (0.00 sec)
    
    mysql> INSERT INTO b SELECT 22;
    Query OK, 1 row affected (0.04 sec)
    Records: 1 Duplicates: 0 Warnings: 0
    
    mysql> INSERT INTO b SELECT 123456789;
    Query OK, 1 row affected (0.04 sec)
    Records: 1 Duplicates: 0 Warnings: 0
    
    mysql> SELECT * FROM b;
    +------------+
    | id         |
    +------------+
    | 0000000022 |
    | 0123456789 |
    +------------+
    2 rows in set (0.00 sec)

    此时可以很轻易的看出,在int(10)的情况下,在插入不足10位宽度的数字时,都会在数字前补0至10位宽度。
    还可以看到,在添加了ZEROFILL之后,int的默认宽度由默认的11改为了10。

    网上有部分结论与我所理解的有一部分不一样,不知与版本是否有关,此处版本:

    mysql> SELECT version();
    +-----------+
    | version()  |
    +-----------+
    | 5.6.26    |
    +-----------+
    1 row in set (0.00 sec)
  • 相关阅读:
    Thinkphp整合最新Ueditor编辑器
    git管理和自动部署项目
    [转]桶
    Linux下ThinkPHP网站目录权限设置
    ThoughtWorks FizzBuzzWhizz 代码实现
    windows bat脚本实现ftp自动下载 删除
    MCM/ICM2018美国大学生数学建模大赛D题翻译
    解决C/C++语言中全局变量重复定义的问题
    使用fabric解决百度BMR的spark集群各节点的部署问题
    解决百度BMR的spark集群开启slaves结点的问题
  • 原文地址:https://www.cnblogs.com/zuge/p/6164311.html
Copyright © 2020-2023  润新知