0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你真的能区别int(1)和int(10)的应用?

jf_ro2CN3Fa 来源:稀土掘金 2023-12-06 14:43 次阅读

困惑

最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解释。

其实这不是我第一次遇到这样的问题了,其中不乏有工作5年以上的老司机。包括我经常在也看到同事也一直使用int(10),感觉用了int(1),字段的上限就被限制,真实情况肯定不是这样。

数据说话

我们知道在mysql中 int占4个字节,那么对于无符号的int,最大值是2^32-1 = 4294967295,将近40亿,难道用了int(1),就不能达到这个最大值吗?

CREATETABLE`user`(
`id`int(1)unsignedNOTNULLAUTO_INCREMENT,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4;

id字段为无符号的int(1),我来插入一个最大值看看。

mysql>INSERTINTO`user`(`id`)VALUES(4294967295);
QueryOK,1rowaffected(0.00sec)

可以看到成功了,说明int后面的数字,不影响int本身支持的大小,int(1)、int(2)...int(10)没什么区别。

零填充

一般int后面的数字,配合zerofill一起使用才有效。先看个例子:

CREATETABLE`user`(
`id`int(4)unsignedzerofillNOTNULLAUTO_INCREMENT,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4;

注意int(4)后面加了个zerofill,我们先来插入4条数据。

mysql>INSERTINTO`user`(`id`)VALUES(1),(10),(100),(1000);
QueryOK,4rowsaffected(0.00sec)
Records:4Duplicates:0Warnings:0

分别插入1、10、100、1000 4条数据,然后我们来查询下:

mysql>select*fromuser;
+------+
|id|
+------+
|0001|
|0010|
|0100|
|1000|
+------+
4rowsinset(0.00sec)

通过数据可以发现 int(4) + zerofill实现了不足4位补0的现象,单单int(4)是没有用的。而且对于0001这种,底层存储的还是1,只是在展示的会补0。

总结

int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。

zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。

cfd36f68-93d3-11ee-939d-92fbcf53809c.jpg

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Int
    Int
    +关注

    关注

    0

    文章

    23

    浏览量

    16056
  • MySQL
    +关注

    关注

    1

    文章

    801

    浏览量

    26438

原文标题:很多资深开发竟然都不清楚 int(1) 和 int(10) 的区别!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于单片机的中断控制程序(INT0+INT1)【C语言】

    基于单片机的中断控制程序(INT0+INT1)【C语言】
    发表于 12-29 18:17 23次下载

    Proteus之INT1的应用

    Proteus之INT1的应用,很好的Proteus资料,快来下载吧。
    发表于 04-18 15:34 0次下载

    Proteus之 INT0和INT1两个中断的应用

    Proteus之 INT0和INT1两个中断的应用,很好的Proteus资料,快来下载吧。
    发表于 04-18 15:34 0次下载

    Proteus之INT0和INT1控制的加减计数

    Proteus之INT0和INT1控制的加减计数,很好的Proteus资料,快来下载吧。
    发表于 04-18 15:34 0次下载

    基于8051的Proteus仿真-INT0及INT1中断计数

    基于8051的Proteus仿真-INT0及INT1中断计数
    发表于 09-01 23:29 33次下载

    使用51单片机的INT 0及INT 1中断计数的资料和程序免费下载

    本文档的主要内容详细介绍的是使用51单片机的INT 0及INT 1中断计数的资料和程序免费下载。
    发表于 09-02 17:28 0次下载
    使用51单片机的<b class='flag-5'>INT</b> 0及<b class='flag-5'>INT</b> <b class='flag-5'>1</b>中断计数的资料和程序免费下载

    单片机INT0及INT1中断计数仿真电路图免费下载

    本文档的主要内容详细介绍的是单片机INT0及INT1中断计数仿真电路图免费下载。
    发表于 01-15 14:46 4次下载
    单片机<b class='flag-5'>INT</b>0及<b class='flag-5'>INT1</b>中断计数仿真电路图免费下载

    单片机INT0和INT1控制条形LED的程序和仿真资料免费下载

    本文档的主要内容详细介绍的是单片机INT0和INT1控制条形LED的程序和仿真资料免费下载。
    发表于 06-04 17:58 8次下载
    单片机<b class='flag-5'>INT</b>0和<b class='flag-5'>INT1</b>控制条形LED的程序和仿真资料免费下载

    单片机INT0与INT1中断计数C语言程序免费下载

    本文档的主要内容详细介绍的是单片机INT0与INT1中断计数C语言程序免费下载。
    发表于 06-04 17:58 4次下载
    单片机<b class='flag-5'>INT</b>0与<b class='flag-5'>INT1</b>中断计数C语言程序免费下载

    单片机实验INT0及INT1中断计数的程序和仿真资料免费下载。

    本文档的主要内容详细介绍的是单片机实验INT0及INT1中断计数的程序和仿真资料免费下载。
    发表于 06-05 16:55 4次下载
    单片机实验<b class='flag-5'>INT</b>0及<b class='flag-5'>INT1</b>中断计数的程序和仿真资料免费下载。

    使用单片机实现INT0及INT1中断计数的C语言程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现INT0及INT1中断计数的C语言程序免费下载
    发表于 03-24 09:40 16次下载

    INT0和INT1中断计数 PROTEUS 和51单片机教程(仿真文件+源代码)

    功能:INT0和INT1中断计数,INT0和INT1分别计数和清零,也可以把两个连在一起计数PROTEUS 和51单片机教程程序的C语言代码如下:/*
    发表于 11-22 16:36 19次下载
    <b class='flag-5'>INT</b>0和<b class='flag-5'>INT1</b>中断计数 PROTEUS 和51单片机教程(仿真文件+源代码)

    基于AT89C51单片机INT0及INT1中断计数仿真及代码

    基于AT89C51单片机INT0及INT1中断计数仿真及代码
    发表于 05-04 14:53 0次下载

    STC12C5A60S2-使用外中断INT0-INT1-测频率源代码

    STC12C5A60S2-使用外中断INT0-INT1-测频率源代码
    发表于 05-17 15:13 0次下载

    STC单片机INT0-INT1-外中断测试源代码

    STC单片机INT0-INT1-外中断测试源代码
    发表于 05-17 15:08 0次下载