昨天在群里(点击加群)看到有小伙伴分享了这篇文章,觉得挺不错的。顺手转载一下,一起涨知识!

困惑

最近遇到个问题,有个表的要加个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没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。

图片
来源:juejin.cn/post/6992574502282477605

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!

推荐阅读

  • 俄罗斯的 HTTPS 也要被废了?

  • 如何Redis解决WebSocket分布式场景下的Session共享问题

  • Spring Boot 配置 HTTPS 的详细流程

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书、创过业、国企4年互联网6年。10年前毕业加入宇宙行,工资不高、也不算太忙,业余坚持研究技术和做自己想做的东西。4年后离开国企,加入永辉互联网板块的创业团队,从开发、到架构、到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

点击阅读原文,送你免费Spring Boot教程

你知道 int(1) 和 int(10) 的区别吗?相关推荐

  1. int(1) 和 int(10) 有什么区别?资深开发竟然分不清!

    欢迎关注方志朋的博客,回复"666"获面试宝典 困惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table x ...

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

    欢迎关注方志朋的博客,回复"666"获面试宝典 最近开发遇到一个问题,涉及到了int(1) 和 int(10) 有什么区别?三年老开发也不知道,于是自己上网 google 研究了下 ...

  3. int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了!

    文章来源:https://sourl.cn/ZVQP6t 困 惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx A ...

  4. int (*a)[10] 和 int *a[10] 的区别

    int *a[10] :数组指针.数组a里存放的是10个int型指针 int (*a)[10] :a是指针,指向一个数组.此数组有10个int型元素 int *a[10] 先找到声明符a,然后向右看, ...

  5. c语言(int)x 100,【单选题】下列语句执行后,变量a、c的值分别是( ) int x=182; int a,c;c=x/100;a=x%10;...

    [单选题]下列语句执行后,变量a.c的值分别是( ) int x=182; int a,c;c=x/100;a=x%10; 更多相关问题 阅读下面短文,掌握其大意,然后从36-55各题所给的四个选项( ...

  6. val什么意思vb中的属性值_老司机带你探索Mysql中int(1)、int(10)、int(11)的区别是什么?...

    在上一篇原创文章MySQL一个表的自增id用完了,背井大佬让我用这些姿势再往里插数据,最后留下了一个问题,大家知不知道int(1)和int(11)有什么区别,没有小伙伴互动回答,只有一位老哥让我说一下 ...

  7. int *p=new int; int *p=new int[10]; int *p=new int(10);这三个有什么区别

    int p=new int;--分配一个int型变量所占大小的空间,并将首地址赋给int 型指针p. int p=new int[10];--分配一个有10个int型元素的数组所占空间,并将该数组的第 ...

  8. C++中int a[10]和int* a=new int[10]]有什么区别

    我们常常看见,在图论中,对一个Graph类在初始化的时候,对类的成员变量**arc(邻接矩阵,是一个二维数组,大小是顶点数*顶点数,存储内容为边的权值,而且矩阵的对角线元素均为0),有如下的初始化方法 ...

  9. 资深开发居然不清楚int(1)和int(10)的区别

    困惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1).领导看到我的sql工单, ...

最新文章

  1. 电脑怎么连蓝牙耳机_蓝牙耳机怎么关机
  2. Java阶段性测试--知识点:数组,面向对象,集合、线程,IO流
  3. eclipse 安装tomcat
  4. oracle分页查询数据(收藏)
  5. idea修改maven项目版本号
  6. MATLAB仿真TSC在哪里找,-bash:tsc:找不到命令
  7. 【知云】第六期:数据级异地容灾如何实现?阿里云帮你打通数据的“任督二脉”...
  8. pom文件配置多个远程仓库地址_分布式配置中心Config
  9. 微信小程序之页面跳转
  10. 基础04继承、super、this、抽象类
  11. 白盒测试用例设计方法
  12. 关于ASCII码的转换
  13. 小学计算机设备维护制度,中学设备管理维护规章制度
  14. 记GMGDC2013大会
  15. mysql卸载如何彻底删除6_如何彻底卸载删除MySQL
  16. 【2010强悍教程】一次性永远激活7290自带浏览器上网和彩信收发功能,不能上网的进。...
  17. 开启CDN 后网站出现 “ 您的连接不是私密连接 ”
  18. 跨境电商须知:Google CWV新政及应对之道(下)
  19. Cypress-should()常见断言
  20. Barbara Liskov:CLU与Argus语言发明人

热门文章

  1. java 静态方法上的泛型
  2. 通过VNC Viewer使用VMware虚拟机的远程桌面连接
  3. 学会用core dump调试程序错误(转)
  4. mysql5.5异常: java.sql.SQLException: Packet for query is too large (1055975 1048576).
  5. linux shell 文件去除重复行
  6. python3 判断ip类型 ipv4 ipv6
  7. python3 selenium 无头浏览器 错误 FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver'
  8. linux nDPI 协议检测 源码分析
  9. linux c send recv MSG_NOSIGNAL参数
  10. 国际化困境(第二篇)