数据库中很多整型数据限定了长度,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) 是相同的
 
                     
                     
                        
                        