之前对于mysql并没有太多的学习,所以对于整形类型后边的数字没有太多的理解,这次被一个后辈问到这个问题,自己也不知道如何解释,所以回头看了看资料,把该理解的给补上。
一开始以为int(11)是指存储长度为11位,int(10)就是存储长度为10位,但是,这是错的
首先,先解释一下字节(byte)和位(bit)的关系(在计算表示范围时会用到二者的关系)
位(bit):英文bit,是计算机晶体管的一种状态(通电与断电).就是0与1,真与假,是计算机最基本的传输单位
示例:
2bit : 10;
4bit : 1111;
8bit : 1111 1111;
字节(byte):是计算机信息技术用于计量存储容量的一种计量单位
二者关系:
1B = 8bit
1B = 1111 1111(二进制)
1B = 0至255(十进制)
1B = -128至127(十进制)
mysql的基本数据类型里几个int如下:
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 ( -2^15 :-32 768,2^15 - 1:32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT 4 字节 (-2^31:-2 147 483 648, 2^31 - 1:2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-2^63:-9 233 372 036 854 775 808,2^63-1:9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
这些类型,是定长的,其容量是不会随着后面的数字而变化的,比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。所以数据类型括号内的数字不管是多少,所占的存储空间都固定的
显然整数类型后边的数字不是表示的数据长度,而是表示数据在显示时显示的最小长度。
当字符长度超过(m)时,相当于啥都没发生;
当字符长度小于(m)时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充)
所以,没有zerofill,(m)就是无用的。
综述:mysql整数类型后边的数字不是用来限制存储长度的(因为一个类型的存储空间是固定的),而是用来限制最小显示长度的,并且需要跟zerofill搭配使用才会有效果
Happy coding...