我们再MySQL中建表时常常要指定一个长度,但是这个长度并不是该数据类型占用的存储空间,而是所谓的显示宽度。下面我们来建个表测试下:
CREATE TABLE `test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` tinyint(2) DEFAULT NULL,
`name` varchar(3) COLLATE utf8mb4_bin DEFAULT NULL,
`order` bigint(3) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
我们插入如下数据:
INSERT INTO test1(age, name, order) VALUES ( 127, '3', 1);
INSERT INTO test1(age, name, order) VALUES ( 5, '123', 123456789);
插入后结果展示:
我们发现插入的数据中整数型数据对数据的长度及存储空间并没有根据我们设置的宽度进行限制(真实限制其存储空间及取值范围的是对应数据类型的取值范围),如果在整数型数据类型中添加 unsigned zerofill 则会在不满足数据长度的情况下,前面自动补0,已达到对应的位数。
但是需要注意的是 vachar 这样的数据类型是会真实的控制住数据长度的。