int(1)这字段长度不够用吧?

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值