ITPub博客

首页 > 数据库 > MySQL > MySQL int(11)及int(M)解析

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

原创 MySQL 作者:神谕丶 时间:2015-09-21 10:28:54 0 删除 编辑
默认创建int类型的字段,SHOW CREATE TABLE table_name或DESC table_name常常可以看到其默认情况为int(11)。

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

做个实验:

  1. mysql> CREATE TABLE a(id int(2));
  2. Query OK, 0 rows affected (0.39 sec)

  3. mysql> INSERT INTO a SELECT 3333;
  4. Query OK, 1 row affected (0.03 sec)
  5. Records: 1 Duplicates: 0 Warnings: 0

  6. mysql> DESC a;
  7. +-------+--------+------+-----+---------+-------+
  8. | Field  | Type   | Null | Key | Default  | Extra |
  9. +-------+--------+------+-----+---------+-------+
  10. | id    | int(2)  | YES  |      | NULL     |       |
  11. +-------+--------+------+-----+---------+-------+
  12. 1 row in set (0.00 sec)

  13. mysql> SELECT * FROM a;
  14. +------+
  15. | id   |
  16. +------+
  17. | 3333 |
  18. +------+
  19. 1 row in set (0.00 sec)

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



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

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

ZEROFILL的作用是,根据整型数据类型提供的宽度,自动补零。
比如:
  1. mysql> CREATE TABLE b(id int ZEROFILL);
  2. Query OK, 0 rows affected (0.28 sec)

  3. mysql> DESC b;
  4. +-------+---------------------------+------+-----+---------+-------+
  5. | Field  | Type                      | Null | Key | Default  | Extra |
  6. +-------+---------------------------+------+-----+---------+-------+
  7. | id    | int(10) unsigned zerofill  | YES |      | NULL    |        |
  8. +-------+---------------------------+------+-----+---------+-------+
  9. 1 row in set (0.00 sec)

  10. mysql> INSERT INTO b SELECT 22;
  11. Query OK, 1 row affected (0.04 sec)
  12. Records: 1 Duplicates: 0 Warnings: 0

  13. mysql> INSERT INTO b SELECT 123456789;
  14. Query OK, 1 row affected (0.04 sec)
  15. Records: 1 Duplicates: 0 Warnings: 0

  16. mysql> SELECT * FROM b;
  17. +------------+
  18. | id         |
  19. +------------+
  20. | 0000000022 |
  21. | 0123456789 |
  22. +------------+
  23. 2 rows in set (0.00 sec)
此时可以很轻易的看出,在int(10)的情况下,在插入不足10位宽度的数字时,都会在数字前补0至10位宽度。
还可以看到,在添加了ZEROFILL之后,int的默认宽度由默认的11改为了10。

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

  1. mysql> SELECT version();
  2. +-----------+
  3. | version()  |
  4. +-----------+
  5. | 5.6.26    |
  6. +-----------+
  7. 1 row in set (0.00 sec)


关于整型数据类型范围值可参考
http://blog.itpub.net/29773961/viewspace-1803302/

作者公众号(持续更新)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-1804920/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
微信公众号:神谕的暗影长廊

注册时间:2014-07-28

  • 博文量
    161
  • 访问量
    1195299