Mysql中int(1)和int(32)的区别

场景

最近在技术评审的时候,有同事针对关于字段长度的sql提出了int(1)怕是不够用吧,接下来是一顿解释。
其实实际工作情况中,大家可能也会遇到这种情况。经常也看到同事一直使用int(32),感觉用了int(1),字段的上限就被限制了,但实际情况肯定不是这样的。

实操演示

我们知道在mysql中int占4个字节,那么对于无符号的int,最大值是2^32-1=4294967295,将近40亿,难道int(1),就不能到这个最大值了吗?

CREATE TABLE `t_test` (
  `id_1` int(1) UNSIGNED NOT NULL,
  `id_2` int(32) UNSIGNED NOT NULL
)

插入数据:

INSERT INTO t_test(id_1,id_2) VALUES(4294967295,4294967295);

查询数据:

SELECT * FROM t_test

在这里插入图片描述
可以看出是成功的,说明int后面的数字,不影响int本身支持的大小,int(1)和int(32)没什么区别。

零补充

一般int后面的数字,配合zerofill一起使用才有效。看个例子:

CREATE TABLE `t_test` (
  `id` int(4) UNSIGNED ZEROFILL NOT NULL
)

注意int(4)后面加了个ZEROFILL,插入数据:

INSERT INTO t_test(id) VALUES(1);

查询数据:

SELECT * FROM t_test

在这里插入图片描述
可以发现int(4) + ZEROFILL实现了不足4补0的情况,单单int(4) 是没有效果的。并且对于0001这种,底层存储的还是1,只是展示的会补0。

总结

int(1)int(32)在MySQL中表示的整数类型的范围是一样的,它们都可以存储从-2147483648到2147483647(对于int UNSIGNED,则是从0到4294967295)的整数,在这个上下文中,括号内的数字并不限制数值的范围,而只是一个显示宽度提示,在使用ZEROFILL时会有用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值