了不起最近提了一个SQL工单alter table t_user ADD id int(1)
。身边的同事看到后笑着说,你这int声明的长度为1,估计不够用!了不起心里也有点疑惑,不如实践一下看看把!
我们都知道MySQL中Int数据类型占用4个字节,那么对于无符号的Int,最大值是2^32-1,等于4294967295。那我们就创建一个测试表,把id
的值直接干到顶,看下会不会报错。
CREATE TABLE `user` (
`id` int(1) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
mysql> INSERT INTO t_user VALUE(4294967295);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_user;
+------------+
| id |
+------------+
| 4294967295 |
+------------+
1 row in set (0.00 sec)
从上面的执行结果可以看出,int(M)中,M的大小,并不影响int本身支持的数据范围,所以int(1)、int(11)其实没有什么区别。
翻译如下:
对于整数数据类型,M 表示最小的显示宽度。最大的显示宽度为 255。显示宽度与类型可以存储的数值范围无关。 对于浮点数和定点数数据类型,M 表示可以存储的总位数。