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)
原文地址:https://www.cnblogs.com/zuge/p/6164311.html