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 相信数据适合原列宽度。

发布了7 篇原创文章 · 获赞 0 · 访问量 2098

猜你喜欢

转载自blog.csdn.net/weixin_40759863/article/details/103890889
今日推荐