mysql中int(1)中int后面的数字(简单介绍)

你可能知道int(1)这个长度1并不代表允许存储的宽度,但对这个长度也没有真正研究过到底代表什么。

下面链接是mysql数据类型的存储和范围:
http://www.runoob.com/mysql/mysql-data-types.html

我们拿int类型举例:

int类型,占用字节数为 4 byte,字节(byte)并非计算机存储的最小单位,还有比字节(byte)更小的单位就是 位(bit),一个 位(bit)就代表一个0或1;8个 位(bit)组成一个 字节(byte)。
计算机存储单位的换算:
1byte=8bit
1kb=1024byte
1m=1024kb
那么根据int类型允许存储的字节数是4个字节,就能换算出 int unsigned类型能存储的最小值为0,最大值为4294967295(即4byte=32bit,最大值即是32个1组成)

接下来我们看看建表时的字段长度是怎么一回事:

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

uid字段为例,我们这里建的是int(3)

难道我们建了int(3),就不能存放数据1234了?

# 成功把数据1234插入
insert into `test` (`uid`) VALUES(1234);
# 甚至我们还可以存放更多位的数据
insert into `test` (`uid`) VALUES(12345);

mysql中int(1)中int后面的数字(简单介绍)_第1张图片

这个int(M)我们可以简单的理解为:
这个长度是为了告诉MYSQL数据库,我们这个字段的存储的数据的宽度为M位数, 当然如果你不是M位数(只要在该类型的存储范围之内)MYSQL也能正常存储。

我们把这个字段的"属性"修改为UNSIGNED ZEROFILL看一下效果

`uid` int(3) unsigned zerofill NOT NULL,

现在我的uid字段:长度(M)=3, 属性=UNSIGNED ZEROFILL(无符号,用0来填充位数)。
设置这个属性后往表时插入数据,系统会自动把uid字段M不够3位的在左侧用0来填充。
效果如下:

insert into `test` (`uid`) VALUES(11);

mysql中int(1)中int后面的数字(简单介绍)_第2张图片

现在我们应该清楚的知道:长度M与你存放的数值型的数的大小无关.

你可能感兴趣的:(MySQL)