数据库的类型比较多,常用的就是字符串和数字类型, 时间。在功能逻辑上,做枚举类型,bool类型等的时候,显然用不了int这么多数据,因此有很多人会用到smallint, tinyint,byte 等比较节约空间的类型,对于这种情况我认为是很好的。但是如果对这些类型标识的数据范围理解不够深刻,那就有可能导致数据值不足的隐患。所以对于数字类型,如果想偷懒,我觉得全部设置成int类型,也并不会浪费多少空间。但是对于字符串类型varchar,就需要比较慎重的设置长度,而不是不管什么数据都配置成varchar 255, varchar 1000…这种偷懒的形式。这种空间的浪费,肯定不是配置几个tinyint, byte 可以找补回来的。我们知道,数据库读数据的时候,都是按照页来读取的,每一行的数据越少,每一页可以容纳的数据行越多。读取越少的页,会减少IO,提高程序运行的速度,因为空间的有效使用还是很有必要的。像telephone, idcard, bankcard,uuid 这种明确知道数据长度的,只需要做适当的冗余即可,不能都是255或者1000。。。
我在实际项目中,经常看到一个数据库表,在配置int类型的时候,舍不得用int,而用varchar的时候,就一味地浪费。
再就是时间类型,datetime, timestamp, datetime(6) 所能表示的时间范围也大不一样。
因此,偷懒的话,就都配置成datetime即可,也不需要限制长度,如datetime(6). 这个情况我在实际项目里也遇到了,结果正好当时是一个end_date的字段,配置了一个100年的过期时间,导致溢出,插入的时候报错。
所以一定要清楚的认识到短数据类型的范围,可以适当的冗余,但不要无脑的浪费。数据库字段规范还是很重要的,否则五花八门的配置,后续的隐患很大。做数据迁移和扩展,或者做数据库类型切换的时候问题也会很多。