zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/zuge/p/6164311.html
Copyright © 2011-2022 走看看