mysql中int类型的宽度M解析

一直以来在MYSQL建表的时候都有一个困惑,那就是关于int类型。int(M)这个M代表什么?

比如我定义一个文章的主键news_id为int(8)为什么要定义为8?如果我存储一个位数为10的3445667788,发现实际也是可以存储的。于是查看mysql的手册,发现有这样一段话:M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

显示宽度,我们可以理解为所存储数值的位数。比如我设置news_id为int(8),是告诉mysql我要存储的数值的最大位数是个8位数,但是如果存储的超过8位数,只要在int类型允许的范围内(signed类型-2147483648~2147483647,unsigned类型0~4294967295)也是可以存储的。比如:



从上面两个图可以看出,我存储了一个超过8位数的int类型数据,还是能够正常显示的。那么问题又来了,这个M既然只要我能保证在所属范围之内,我是不是可以随意去定义了,当然不是的。首先设置M肯定要跟实际的业务数据相关,多设置浪费存储空间。另外如果你设置了填充0,zerofill的话就可以看出一些端倪:

我们把news_id的宽度设置为3,然后再查看下看看:



我们看到值为1的左端填充了0,原来默认为0的变成了000.所以如果M设置为某个值,并且设置了zerofill的话,当存储的长度小于M的话,会自动填充0.所以有时项目里确实需要存储类似于001,002...的值时,这个M的设置要符合业务需求。对于tinyint,mediumint,bigint等一样的理解。

相比较来说,char(n)和varchar(n)类型的这个n代表实际的存储长度,超过了会被mysql截掉。还是有所区别的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值