类型名称说明存储需求
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 类型的字段:
idint(4);
该声明指明,在id 字段中的数据一般只显示 4 位数字的宽度。
注意:显示宽度和数据类型的取值范围是无关的。显示宽度只是指明 MySQL 最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。例如:假如向 id 字段插入一个数值 19999,当使用 select 查询该列值的时候,MySQL 显示的将是完整的带有 5 位数字的 19999,而不是 4 位数字的值。

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

创建表:
createtable test(xtinyint, ysmallint, zmediumint, mint, nbigint);
查看表结构: