主要是
首先,让我们来看一下 int 数据类型的定义。在 MySQL 中,int 数据类型是一种整数类型,可以存储有符号的整数值,其取值范围为 -2147483648 到 2147483647。也就是说,int 数据类型在 MySQL 中所占用的存储空间是 4 个字节。
那么,int(11) 中的括号里的11代表什么意思呢?实际上,这个括号中的数字并不代表 int 数据类型所占用的存储空间,而是表示该字段的显示宽度。换句话说,int(11) 中的 11 表示该字段的最大显示宽度为 11 个字符。但是,需要注意的是,这个数字并不影响该字段的存储空间或取值范围。
为了更好地理解 int(11) 的意义,我们可以通过以下实例进行说明。假设我们有一个表格,其中有一个字段定义为 int(11),名为 id。如果我们向该字段插入一个值为 1234567890 的整数,那么该值会被完整地存储在该字段中,并不会受到显示宽度的限制。但是,如果我们使用类似于 SELECT id FROM table 的 SQL 查询语句来查询该表格中的数据,该字段的值会以宽度为 11 个字符的形式显示出来,不足 11 个字符的值会在前面填充空格。
CREATE TABLE int_demo ( id INT(11) NOT NULL AUTO_INCREMENT, a INT(11) NOT NULL, b INT(11) UNSIGNED ZEROFILL NOT NULL, c INT(5) DEFAULT NULL, d INT(5) UNSIGNED ZEROFILL NOT NULL, e INT(15) DEFAULT NULL, PRIMARY KEY (`id`))INSERT INTO int_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1);INSERT INTO int_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
结果如下:
不同点来了:所以字段有ZEROFILL关键字修饰的时候,才有在展示的时候不足11位的前面补0.
需要注意的是,int 字段的显示宽度并不是必需的。如果不指定显示宽度,MySQL 会默认为 int 字段分配最大的存储空间,也就是 4 个字节。因此,int(11) 和 int(4) 在存储空间上是完全相同的。
除了 int 类型之外,MySQL 还支持其他的整数类型,包括 tinyint、smallint、mediumint 和 bigint。这些整数类型也可以通过类似于 int(11) 的方式进行定义,并且也可以指定显示宽度。