今天看公司项目的数据库结构设计, 看到 int(1) 和 tinyin(1) 这些东西, 脑海中第一浮现的就是这玩意有啥用, 尝试写了多余 1 位的数照样正常显示, 不知道为啥要这么写, 有啥用呢? 查找了下资料才明白.
我们知道, int 类型占 4 个字节, tinyint 占 1 个字节. int(1) 和 int(4) 从本身长度还是存储方式上都是一样的, 区别就是显示的长度不同, 但是要设置一个参数: 如果列制定了 zerofill 就会用 0 填充显示, int(4) 指定后就会显示为 0002.
int(1) 和 tinyint(4) 相比, 肯定 int 大.
注意数字类型后面括号中的数字, 不表示长度, 表示的是显示宽度, 这点与 varchar,char 后面的数字含义是不同的.
也就是说不管 int 后面的数字是多少, 它存储的范围始终是 -2^31 到 2^31 - 1.
综上整型的数据类型括号内的数字不管是多少, 所占的存储空间都是一样
tinyint 一个字节 smallint 两个字节 MEDIUMINT 三个字节
显而易见, int(1) 和 tinyint(1) , 在设计数据库的时候应该选择 tinyint(1). 所占的储存空间越少越好, 当然要够用才行. 像这样储存一个 个位数的字段, 还是用 tinyint(1) 的好.
总结:
1. 规定类型之后, 存储是定长的, int(1) 和 int(4) 从本身长度还是存储方式上都是一样的. MySQL 里, int(1) 和 int(4) 的区别就是显示的长度, 但是要设置一个参数: 如果列制定了 zerofill 就会用 0 填充显示, 如 2 int(3) 指定后就会显示为 002
2.int 存储占 4 个字节, tinyint 存储占 1 个字节, 存储长度决定了他们表示的数字范围不同. int 表示的数字范围是: 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据 (所有数字).tinyint 表示的范围是 0-255 之间的数字.
3.tinyint(1), 和 tinyint(3) 没什么区别, 存 123 都能存的下, 而如果 tinyint(3) zerofill 的话, 插入值 12, 会存储 012,zerofill 自动左边补零, 这才是限制显示长度.
上面总结的有点乱. 下面精简总结:
tinyint(1) 和 tinyint(3) 没什么区别, 占用字节都是一位, 存储范围都是一样的
tinyint(3) zerofill , 当插入的数据少于 3 位的时候, 左边自动补零, 这才是限制显示长度
int(1) 和 tinyint(1) , 够用的情况下, 优先选择 tinyint(1), 因为占字节少, 节省空间.
tinyint 一个字节 smallint 两个字节 MEDIUMINT 三个字节 int 4 个字节 BIGINT 8 个字节.
但是, varchar(5) 这里的 5 限制的是储存字符的个数, 字符不分贵贱 (不分 中文, 英文, 数字...).
来源: http://www.qdfuns.com/article/31986/e9ebe5deebeb6b4fe498ac00726cb67a.html