默认创建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)
关于整型数据类型范围值可参考
http://blog.itpub.net/29773961/viewspace-1803302/
作者公众号(持续更新)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-1804920/
,如需转载,请注明出处,否则将追究法律责任。