mysql存储整型_MySQL数据类型-整型

​MySQL支持SQL标准整数类型integer(或INT)和SMALLINT。作为标准的扩展,MySQL还支持整数类型TINYINT、MEDIUMINT和BIGINT。

类型

所占字节

有符号最小值

无符号最小值

有符号最大值

无符号最大值

TINYINT

1

-128

0

127

255

SMALLINT

2

-32768

0

32767

65535

MEDIUMINT

3

-8388608

0

8388607

16777215

INT

4

-2147483648

0

2147483647

4294967295

BIGINT

8

-263

0

263-1

264-1

下面是创建表的语句:

CREATE TABLE `person` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',

`age` int(2) COMMENT '年龄',

`stature` int(3) ZEROFILL COMMENT '身高',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

​其中列 id 、 age、stature都是整型 。其中int后面括号中的数字指的是列宽,用M表示。对于整数类型,M表示最大显示宽度。最大显示宽度为255。显示宽度与类型可以存储的值范围无关。

我们来添加几条数据测试:

INSERT INTO person( age, stature) VALUES(102,168);

INSERT INTO person( age, stature) VALUES(5,80);

INSERT INTO person( age, stature) VALUES(99999,99999);

查询结果:

id

age

stature

1

102

168

2

5

080

3

99999

99999

age我们设置的宽度是2,但是没有增加ZEROFILL属性,这个时候,不论是INT(2)还是INT(11),它在数据库里面存储的都是4个字节的长度,没有任何区别。

stature我们设置的快读是3,并且设置了ZEROFILL属性,那么我们插入的长度小于3,前面就补0,如080,如果长度大于3,如99999,则也可以正常插入。

注意:我使用 Navicat 查询的时候,第三条记录显示不正确(少了几个9),但是使用命令行查询则正确。

如果为数值列指定了ZEROFILL, MySQL会自动将UNSIGNED属性添加到该列。

INSERT INTO person( age, stature) VALUES(25,-80);

结果如下,说明stature已经是非负整数了:

INSERT INTO person( age, stature) VALUES(25,-80)

> 1264 - Out of range value for column 'stature' at row 1

> 时间: 0.004s

​从MySQL 8.0.17开始,对于数字数据类型,不建议使用ZEROFILL属性,并且在将来的MySQL版本中将不再支持该属性。 考虑使用替代方法来产生此属性的效果。 例如,应用程序可以使用 LPAD() 函数将数字零填充到所需宽度,或者将格式化的数字存储在CHAR列中。

总结:

不加 ZEROFILL 属性,int(1) 和 int(11)没有任何区别,底层数据都是4个字节,注意字段显示宽度最大为255.

加上 ZEROFILL 属性,列默认为无符号,并且值宽度小于显示宽度会在左边补0,大于显示宽度则正常显示。

不建议使用 ZEROFILL 属性,使用LPAD函数代替此功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值