公司里的项目数据库的时间类型好多都设定的string型,那么这么做的好处是什么呢,数据库设定data型应该也是有用处的吧,求解
------解决思路----------------------
将时间设置成string是偷懒的做法。虽然在string类型还是可以进行比较,如小于大于等于,问题如下:
1. string类型的字节数大小远大于datetime等类型,造成空间浪费,datetime本质上是双int型;
2. String类型的日期格式固定,无法像datetime一样调整显示格式,不同格式要进行join,需要两次类型转换;
3. String类型无法处理时区等信息;
综上,OLTP系统不应该用string。而在数据仓库系统里,为了进一步简化计算,往往把date和time分开,都用int型来表示。
------解决思路----------------------
我们公司也是把业务日期设置为了 varchar类型,不建议这么设置。
如果是日期,建议使用date类型,如果还需要有时间部分,建议使用它datetime
因为如果用varchar 来存储年月日,那么需要10个字节,而date类型只需4个字节,而datetime类型也只需要8个字节,都小于varchar类型。
其次,在进行查找、比较时,由于date和datetime本质上存储在数据库中是一个数字,所以直接通过数值比较效率很高,而varchar进行比较 必需要一个字符一个字符比较,所以速度很慢。
如果再想深一点,一条记录少了几个字节,关键是如果记录数多,那么总体节省的字节数就会很多,另外,加载到内存后,闸弄的内存更少,同时也只需要更少的IO,查询速度更快。
------解决思路----------------------
string 存储比较灵活,你可以存成 2015-1-1 ,也可以存成 2015-01-01 、2015-01.01 随心所欲,如果只是用来展示出来,不用考虑格式的话,也挺好
datetime ,就必须是规范的格式了,如这列增加索引做为查询条件,还是很有优势的。