数据库中很多整型数据限定了长度,int(3):有些人会错误认为3代表的是允许存储的最大宽度,比如:误以为int(3)能存储的最大数是999,不能存储大于999的数值。
MySQL的int和tinyint的默认长度是int(11)和tinyint(4),而boolean型实际存储的是tinyint(1).
浮点型的长度使用来限制数字存储范围的。比如float(3,2),只能够写入0.00-999.99
整型的长度并不会限制存储的数字范围。比如 int和int(3)的存储范围都是-2147483648 ~ 2147483647, int unsigned 和 int(3) unsigned 的存储范围都是0 ~ 4294967295.
整型的长度实际上可以理解为”显示长度“,如果该字段有开启"zerofill/补零"就能很明显的知道它的作用。
1 验证整型长度是否会限制存储范围和整型长度的补零作用
创建数据表:
CREATE TABLE test01(
with_int_length int(3),
without_int_length int
)
insert into test01(with_int_length,without_int_length) values(1111,1111);
insert into test01(with_int_length,without_int_length) values(11111,11111);
commit;
mysql> select * from test01;
+-----------------+--------------------+
| with_int_length | without_int_length |
+-----------------+--------------------+
| 1111 | 1111 |
| 11111 | 11111 |
+-----------------+--------------------+
2 rows in set (0.00 sec)
CREATE TABLE test02 (
with_length int(3) ZEROFILL,
without_length int
) ENGINE=innodb, CHARSET=utf8
insert into test02 (with_length, without_length) VALUE (11, 11);
select * from test02;
mysql> select * from test02;
+-------------+----------------+
| with_length | without_length |
+-------------+----------------+
| 011 | 11 |
+-------------+----------------+
1 row in set (0.01 sec)
高性能MySQL一书中说明:
“高性能MySQL” 书中在”4.1 选择优化的数据类型”中提到:
MySQL 可以为整数类型指定宽度, 例如 INT(11), 对大多数应用这是没有意义的: 它不会限制值的合法范围, 只是规定了 MySQL 的一些交互工具(例如 MySQL 命令行客户端)用来显示字符的个数. 对于存储和计算来说, INT(1) 和 INT(20) 是相同的