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填充,否则看不出效果的。
作者:JackpotHan
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下