MySQL中建表时的int(m)中的m代表什么意思?

 在我们使用MySQL数据库管理工具建表时,经常在使用选择整数类型比如int后会选择“长度”这一属性值,如下图:

我们也可以使用下列sql语句在建表:

CREATE TABLE `test` (
  `test1` int(3) unsigned zerofill DEFAULT NULL,
  `test2` int(10) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

那么上面的语句中的int(3)和int(10)中的“3”和“10”代表什么意思呢?是表示“test1”和“test2”这两列的数据长度分别为3位和10位吗?其实不然,这里的“3”和“10”表示的是这该列数据的“最大显示长度”。这是什么意思呢?当我们在建表时加上zerofill的属性后就可以看出“3”和“10”的区别,下面我们分别在“test1”列和“test2”列都插入值444444444和4:

从上图可以看出,所谓的“最大显示长度”即是我们的数据的显示长度,当我们定义数据库中的某一列的整数类型为int(m)后并且为这一列加上zerofill(用“0”填充)属性后,如果数据的值的长度小于m,那么MySQL会自动为我们的数据值从右向左填充“0”直到数据的显示长度等于0为止,比如上面的“test1”列和“test2”列的值为“444444444”时,因为“test2”列的显示长度为10,而“444444444”的长度为9,所以MySQL会自动帮我们在“444444444”的左边补一个0,而“test1”列的长度为3,则不会填充0;同理,当“test1”列的值为“4”时,MySQL会自动在“4”的左边填充“00”。

综上所述,int(m)中的m其实和插入该列的数据的值的长度(大小范围)没有关系,当我们定义某一列的数据类型为int时,不管是int(3)或者是int(10),这一列的数据的值大小范围是一样的,在没有负数的情况下,都为0 到 4294967295,因为int的数据类型为占4个字节的二进制数,一个字节为8位,所以在没有区分正负值的情况下int的数据范围为0(32位数字都为0)到  4 294 967 295(32位数字都为1,即2的32次方)。如果在有符号的情况下:则int的范围为:-2147483648 到  2147483647。下面是MySQL的一些数据类型的大小和范围:

最后要注意一点的是,如果在整数列中保存超过显示宽度的一个值,当 MySQL 为复杂联接生成临时表时会遇到问题,因为在这些情况下 MySQL 相信数据适合原列宽度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值