int(4)、int(8)、int(11) 分别占用几个字节 ?

本文探讨了MySQL中int(4)、int(8)、int(11)等整数类型的数据占用字节数问题。尽管int(11)等指定了显示宽度,但实际占用空间均为4个字节。显示宽度仅影响显示形式,不影响存储空间和取值范围。
该文章已生成可运行项目,


探讨这个问题之前,我们先来回忆一下 MySQL 支持存储的数据类型有哪些 ?

在这里插入图片描述

MySQL 数据类型介绍

MySQL 支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。

数值类型

  1. 整数类型:tinyint、smallint、mediumint、int、bigint;
  2. 浮点小数类型:float 、double;
  3. 定点小数类型:decimal

日期/时间类型

year、time、date、datetime、timestamp

字符串类型

char、varchar、binary、varbinary、blob、text、enum、set 等

由于本篇文章重点讨论 int(integer)占用字节的问题,其所属整数型数据类型,所以下面从整型数据类型讲起

int(4)、int(8)、int(11) 分别占用几个字节 ?

MySQL 中的整数型数据类型:

类型名称说明存储需求
tinyint很小的整数1 个字节
smallint小的整数2 个字节
mediumint中等大小的整数3 个字节
int(integer)普通大小的整数4 个字节
bigint大整数8 个字节

从上表中可知,不同类型整数存储所需的字节数是不同的,占用字节数最小的是 tinyint 类型,占用字节最大的是 bigint 类型,相应的占用字节越多的类型所能表示的数值范围越大。根据占用字节数可以求出每一种数据类型的取值范围,例如 tinyint 需要 1 个字节(8 bits)来存储,那么 tinyint 无符号数的最大值为 28,即 255。tinyint 有符号数的最大值是 2^7 - 1,即 127。其他类型的整数的取值范围计算方法相同,如下表所示:

不同整数类型的取值范围:

数据类型有符号无符号
tinyint-128~1270~255
smallint-32768~327670~65535
mediumint-8388608~83886070~16777215
int(integer)-2147483648~21474836470~4294967295
bigint-9223372036854775808~92233720368547758070~18446744073709551615

回归正题,int(4)、int(8)、int(11) 究竟占用几个字节呢 ?

答案已经在上面写明啦已经呼之欲出啦,他们都是 4 个字节。

在这里插入图片描述

我们以 int(11) 为例来说,11 代表该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。

再举个例子,假设声明一个 INT 类型的字段:

id int(4);

该声明指明,在 id 字段中的数据一般只显示 4 位数字的宽度。

注意:显示宽度和数据类型的取值范围是无关的。显示宽度只是指明 MySQL 最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。例如:假如向 id 字段插入一个数值 19999,当使用 select 查询该列值的时候,MySQL 显示的将是完整的带有 5 位数字的 19999,而不是 4 位数字的值。

再举个例子说明每种数据类型的默认显示宽度

创建表:

create table test (x tinyint, y smallint, z mediumint, m int, n bigint);

查看表结构:
在这里插入图片描述
可以看到,系统将添加不同的默认显示宽度。这些显示宽度能够保证显示每一种数据类型可以取到取值范围内的所有值。例如,tinyint 有符号数和无符号数的取值范围分别为 -128~127 和 0~255,由于负号占了一个数字位,因此 tinyint 默认的显示宽度为 4。同理,其他证书类型的默认显示宽度与其有符号数的最小值的宽度相同。

不同的整数类型有不同的取值范围,并且需要不同的存储空间,因此,应该根据实际需要选择最合适的类型,这样有利于提高查询的效率和节省存储空间。

总结一下

显示宽度只用于显示,并不能限制取值范围和占用空间,如:int(3) 会占用 4 个字节的存储空间,并且允许的最大值也不会是 999,而是 int 整型所允许的最大值。

在这里插入图片描述

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值