前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >int(1)和int(11)的区别,原来我一直理解错了。。

int(1)和int(11)的区别,原来我一直理解错了。。

作者头像
程序员小饭
发布2022-03-03 11:32:51
1.7K0
发布2022-03-03 11:32:51
举报
文章被收录于专栏:golang+phpgolang+php

背景

相信大家都有过这种经历,建表的时候id字段一般都会默认设置为int(11).

我们知道char(10),varchar(10)这种都是指占用多少个字节,比如用char(10)存储‘1234567890ab’,会被截断成’1234567890’,因为超过了指定长度10。

那么int(11)中的11是代表占了多少个长度么?

疑问

int类型定义

整形跟char、varchar不同,整形分为tinyint,smallint,mediumint,bigint

根据上图我们可以看到int类型可以表示的范围最大能到4294967295。

既然已经根据长度不同,内置了整形的不同类型,那么int(1)和int(11)有什么区别?

官方解释

其实想知道他们的区别直接看mysql手册即可,这也是最靠谱的办法

代码语言:javascript
复制
int(M): M indicates the maximum display width for integer types.1
在 integer 数据类型中,M 表示最大显示宽度。

原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。

int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。

说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。

动手实践

我们来新建一张表

代码语言:javascript
复制
CREATE TABLE `test` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

test表id为int(1)

然后插入int可以表示的最大值4294967295

代码语言:javascript
复制
mysql> INSERT INTO `test` (`id`) VALUES (4294967295);
Query OK, 1 row affected (0.00 sec)

我们可以看到是可以插入成功的,而且也是可以保存下来的。

所以由此说明int(M)中的M和存储的数据长度是没什么关系的。

换句话说int(11)能存储多大的数字,那么int(1)就能存储多大的数字

zerofill

根据上面的结论int(11)和int(1)表示的数字的范围是一样的,那么设置int(M)中的M的意义是什么呢?其实设置M得和zerofill结合起来才会生效

我们先看个例子

代码语言:javascript
复制
CREATE TABLE `test` (
  `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) 

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

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

然后我们来查询下

代码语言:javascript
复制
mysql> select * from test;
+------+
| id   |
+------+
| 0001 |
| 0010 |
| 0100 |
| 1000 |
+------+
4 rows in set (0.00 sec)

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

总结

int(M)中的M并不能表示数字的长度,int(M)得和zerofill配合使用,才有效果,简单说就是零填充的作用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员养成日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • int类型定义
  • 官方解释
  • 动手实践
  • zerofill
  • 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档