mysql中int类型的宽度M解析

mysql中int类型的宽度M解析

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

20160910095319195.jpg

20160910095404399.jpg

显示宽度,我们可以理解为所存储数值的位数。比如我设置news_id为int(8),是告诉mysql我要存储的数值的最大位数是个8位数,但是如果存储的超过8位数,只要在int类型允许的范围内(signed类型-21474836482147483647,unsigned类型04294967295)也是可以存储的。比如:
从上面两个图可以看出,我存储了一个超过8位数的int类型数据,还是能够正常显示的。那么问题又来了,这个M既然只要我能保证在所属范围之内,我是不是可以随意去定义了,当然不是的。首先设置M肯定要跟实际的业务数据相关,多设置浪费存储空间。另外如果你设置了填充0,zerofill的话就可以看出一些端倪。
我们把news_id的宽度设置为3,然后再查看下看看:
20160910100221368.jpg

我们看到值为1的左端填充了0,原来默认为0的变成了000.所以如果M设置为某个值,并且设置了zerofill的话,当存储的长度小于M的话,会自动填充0.所以有时项目里确实需要存储类似于001,002...的值时,这个M的设置要符合业务需求。对于tinyint,mediumint,bigint等一样的理解。
相比较来说,char(n)和varchar(n)类型的这个n代表实际的存储长度,超过了会被mysql截掉。还是有所区别的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容