Fork me on GitHub

Mysql int类型你了解多少

前两天和朋友闲聊,聊到了数据库设计相关的问题,朋友突然画风一转--为什么数据库里面int最大长度只能int(11),long最大长度只能bigint(20)?为什么int(4)可以存下999999?

我当时的回答有点含糊--int类型4字节,4*8=32bit,2^32-1是11位吧! int(*)里面的*并非数字的长度吧!(有点心虚qwq...)

事后想起了这件事,用计算器算了下2^ 32-1,结果居然是4294967295,只有十位啊??? 当时觉得应该是某个环节弄错了,肯定是(自信满满..) 突然注意到建表语句中的unsigned(无符号的)这个单词,恍然大悟,还有符号位(+/-),正好11位.

我比较在意的是后面一个问题,为什么int(4)可以存下999999,难道像varchar一样是一种可变长度的类型.我觉得问题不会这么简单,于是借助强大的浏览器搜索了一下,终于弄明白了到底是怎么回事.

这里我把查到的资料整理一下

下图是来自详解mysql int类型的长度值问题

 从上图可以看出来:sql每种整形类型的取值范围及最大长度

另外,int(*)都可以存储上述范围的数字,也就是说int(1)和int(11)都能存储上述范围内的数字.(注意有无符号范围不一样)

具体的区别就是,用int(11)存储32,数据库会在前面补满0.要查看出不同效果可以在创建类型的时候加 zerofill这个值,表示用0填充,否则看不出效果的。

 

posted @ 2020-08-03 15:31  JackpotHan  阅读(2020)  评论(0编辑  收藏  举报