一、数据库中整型可以分为5种,TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT,分别占用1、2、3、4和8个字节,这个是固定的。
也就是说这个
在定义表的时候选择INT(11)和INT(5)对于占用的空间是没有区别的,都是4个字节,32个二进制位,可存储的值都在下表所示范围内。
Type
|
Storage (Bytes)
|
Minimum Value Signed
|
Minimum Value Unsigned
|
Maximum Value Signed
|
Maximum Value Unsigned
|
TINYINT
|
1
|
-128
|
0
|
127
|
255
|
SMALLINT
|
2
|
-32768
|
0
|
32767
|
65535
|
MEDIUMINT
|
3
|
-8388608
|
0
|
8388607
|
16777215
|
INT
|
4
|
-2147483648
|
0
|
2147483647
|
4294967295
|
BIGINT
|
8
|
-2^63
|
0
|
2^63-1
|
2^64-1
|
二、那么问题来了,INT(11)和INT(5)的区别在哪呢?
在用数据库设计工具创建表的时候,可以留意到每个字段有一个
“ZF”(zerofill)属性,如下图(WorkBench):
如果我们将其勾上,插入的自增id是如下格式:
此过程中,
MySQL的存储引擎InnoDB会为不足5位的id用0来补齐。
插入一个较大的id数据:
insert into ansel(id,name,age,birthday) value(1234567,'test',1,'2018*5*22 11@29@1');
展示如下:
假如创建表的时候没有设置ZF属性,可以通过sql语句修改:
alter table ansel modify id int(11) zerofill;
再查询就是如下展示结果:
三、总结:
括号中的长度只在设置了ZF属性时有用,其他的地方没有区别。
用处:有些企业级开发应用场景中,可以用于较长的订单号。
Copyright © 2018 Ansel. All rights reserved.