赞
踩
首先回答一下括号中的参数表示 显示宽度
,与int的能插入数据的范围没有任何关系
。 例如:int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度
。该项功能需要配合“ ZEROFILL ”使用
,表示用“0”在左边填满至5位,否则指定显示宽度没有意义。
该属性MySQL8版本已经不推荐使用。
在MySQL5版本中:
创建test_int1表
CREATE TABLE test_int1 (
X TINYINT,
Y SMALLINT,
z MEDIUMINT,
m INT,
n BIGINT );
查看表结构
DESC test_int1;
TINYINT
有符号数和无符号数的取值范围分别为-128 ~ 127和0 ~ 255,由于负号占了一个数字位,因此 TINYINT
默认的显示宽度为4
。同理,其他整数类型的 默认显示宽度与其有符号数的最小值的宽度相同
。
MySQL整型的取值范围
单纯使用显示宽度参数,是没有任何效果的。想要使用o字符填满宽度,需配合 **ZEROFILL
**使用
ZEROFILL : 0填充
,(如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性),如果指 定了ZEROFILL只是表示不够M位时,用0在左边填充
,如果超过M位,只要不超过数据存储范围即可。
原来,在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系
。 int(3)、int(4)、int(8) 在磁盘上都 是占用 4 bytes 的存储空间。也就是说,int(M),必须和UNSIGNED ZEROFILL一起使用才有意义
。如果整 数值超过M位,就按照实际位数存储。只是无须再用字符 0 进行填充。
在使用ZEROFILL时,会自动添加UNSIGNED属性
创建test_int2表:
CREATE TABLE test_int2(
f1 INT,
f2 INT(5),
f3 INT(5) ZEROFILL
);
查看表结构
DESC test_int2;
插入数据
INSERT INTO test_int2 VALUES(123,123,123),
(1234,1234,1234),
(12345,12345,12345),
(123456,123456,123456);
查看数据
结果可以看出: 配合使用了 zerofill
属性的字段 f3
,在添加数据不足5位时,会用0来填充
。且对添加数据的大小并没有什么限制
。不使用zerofill属性的f2,跟不指定宽度的f1效果相同。
int(M)中的显示宽度属性M是为了在,插入数据不足M位时,使用字符来在左边填充至M位。需配合zerofill属性使用
UNSIGNED:无符号类型(非负) ,所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),无 符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设 置为无符号类型。 int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)。
CREATE TABLE test_int3(
f1 INT UNSIGNED
);
DESC test_int3;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。