int(1) 和 int(10) 的区别?很多老程序都理解错了!

news/2024/7/5 6:21:22

欢迎关注方志朋的博客,回复”666“获面试宝典

最近开发遇到一个问题,涉及到了int(1) 和 int(10) 有什么区别?三年老开发也不知道,于是自己上网 google 研究了下。
把区别和大家分享下。

困惑

最近遇到个问题,有个表的要加个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),就不能达到这个最大值吗?

CREATE TABLE `user` (`id` int(1) unsigned NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

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

mysql> INSERT INTO `user` (`id`) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)

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

零填充

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

CREATE TABLE `user` (`id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

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

mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

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

mysql> select * from user;
+------+
| id   |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)

通过数据可以发现 int(4) + zerofill实现了不足4位补0的现象,单单int(4)是没有用的。

而且对于0001这种,底层存储的还是1,只是在展示的会补0。

总结

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

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

7b4a7b5d4c936544de4b91b1a0efb424.png

作者:假装懂编程
原文:juejin.cn/post/6992574502282477605
热门内容:
  • MySQL + JSON = 王炸!!

  • JetBrains 宣布:IntelliJ 平台彻底停用 Log4j 组件,建议切换至 java.util.logging

  • 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?

  • 最新 955 不加班的公司名单(2022版)

  • SpringCloud 微服务架构,适合接私活(附源码)

26a5dc76034b013c0c71af83b9dd38fe.png

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡


http://lihuaxi.xjx100.cn/news/256603.html

相关文章

Nature:大学教职有多难拿?要名校毕业,还要家里有人

视学算法报道 编辑:David【导读】在世界范围内,大学教职都越来越难拿了。Nature研究显示,美国的大学教职一看毕业学校,二看家庭出身。知名高校的教职,对于每位励志学术的研究人员来说都是个不小的阶段性目标。尤其是最…

KDD Cup 2021 时序异常检测总结!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 方向:时序异常检测,来源:Coggle赛题描述KDD Cup 2021 多数据集时间序列异常检测竞赛汇总了250个时序数据集,通过本地比赛希望…

Salesforce Lightning开发学习(二)Component组件开发实践

lightning的组件区分标准组件、自定义组件和AppExchange组件。标准组件由SF提供,自定义组件由developer自行开发,AppExchange组件由合作伙伴建立。下面我们写一个简单的列表demo来学习下自定义开发组件Component。 第一步:新建一个对象&#…

【怎样写代码】对象克隆 -- 原型模式(四):浅克隆与深克隆

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Mysql高级调优篇——前言简介

本篇开始就进入Mysql高级篇,当然我讲解的身份是Java开发工程师,并非专业的DBA,所以我们以写出高效,好用,Sql优化和开发相关的数据库方面的知识落地为目的,帮助开发解决一些sql上的问题,为迈向高…

都在建议,不要直接使用 @Async 注解,为什么?

欢迎关注方志朋的博客,回复”666“获面试宝典本文讲述Async注解,在Spring体系中的应用。本文仅说明Async注解的应用规则,对于原理,调用逻辑,源码分析,暂不介绍。对于异步方法调用,从Spring3开始…

kafka-manager 的编译和使用(附安装包)

2019独角兽企业重金招聘Python工程师标准>>> kafka-manager是一个非常好用的kafka web管理工具,yahoo开源。 地址:github.com/yahoo/kafka-manager 1、编译过程比较简单,重点是能翻墙,如果网络环境不允许,可…

这个 AI 模型火上 GitHub 热榜第一,在线修复照片

编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)AI 正在对照片编辑产生重大的影响,但结果是还存在很大分歧。支持者说,人工智能释放了新的艺术历年,减少了创作者花在单调工作上的时间。然而,批评者认为这些…