mysql 的int类型_MySQL数据库int类型的那些事

某天朋友问我“为什么我在MySQL数据库中,建表的SQL语句和查询建表后的建表语句不一样啊,int类型的自动变为int(11)了”。我只能回答,“就是酱紫的啊,MySQL就这么设计的”。可是我不能回答为什么会是这样,为什么会是11不是12呢。突然发现自己好low啊,这个问题都回答不了。查了相关资料和做了如下测试后算是彻底搞明白了这个问题。

首先,使用如下sql语句建表:

CREATE TABLE test(id int);

然后使用mysql命令查看建表语句

SHOW CREATE TABLE test

结果显示如下:

281119e02c6289e8b9c0f1f23615fb41.png

这里int自动的变成了int(11)。为什么会这样,还得从int(m)中的m指的是什么来回答这个问题。

MySQL中int类型的取值范围是固定的,带符号范围:-2 147 483 648~2 147 483 647 无符号范围:0~4 294 967 295 。int(m)中的m值,只是决定在查询时显示中的最小长度,对于取值范围没有半毛钱的关系。比如将id字段的属性改为int(5) zerofill ,这个属性的意思是,定义一个int类型的字段,字段值如果小于5位,高位用0填充。验证如下,

3d6bc993456c4e7206448fcfa9966a53.png

通过结果可以看到,如果不足5位,在前面用0填充显示,如果超出5位数,对长度也没有任何影响。知道了(m)的作用,那么再来说说为什么MySQL会默认给11位,数一数int取值范围的最大值和带符号范围的最小值发现刚好是10位数,因为还要给显示符号留一位,所以默认就是int(11)喽。

m的取值范围是多少?在int类型的字段上赋超过范围的值会报什么样的错误?大家都可以去尝试一下。

如果读到这里,认为我想表达的是“实践出真理”吗?不不不,我想说,实践固然重要,但是阅读官方文档更重要。官方的才是最正经的。对于本文的问题,官网文档中给出了明确的说明。

91d090c7e8b3d2725e2fee35f3cd77b4.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值