int(1) 和 int(10) 有什么区别?
最近在做新功能的时候提交了一条sql语句:alter table xxx add column1 int(1),随后领导提示我检查一下提交的sql是否有问题,让我一脸懵,原来是感觉我语句中的int(1)限制了字段的长度。
在数据库中 int占4个字节,对于无符号的int,最大值是2^32-1 = 4294967295,将近40亿,用了int(1),就不能到这个最大值吗?
以下我创建了一张表来实际测试一下。
CREATE TABLE table1
(
id
int(1) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
id字段为无符号的int(1)。
下面插入一条数据:
mysql> INSERT INTO user
(id
) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)
可以看到成功了,说明int后面的数字,不影响int本身类型支持的大小,int(1)、int(10)没什么区别。
所以,int后面的数字不能表示字段的长度,不过在配合zerofill使用时就不一样了:
CREATE TABLE table2
(
id
int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
mysql> INSERT INTO user
(id
) VALUES (1),(10),(100),(1000);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
分别插入1、10、100、1000 4条数据,查询:
mysql> select * from user;
±-----+
| id |
±-----+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
±-----+
4 rows in set (0.00 sec)