mysql 时间字段使用int还是datetime …
注意:这里的int是mysql整形统称, 因为datetime是8字节,所以对应是应由mysql bigint代替,timestamp是4字节,可由mysql int代替,一般java,php时间戳应该是由mysql bigint才能完全存储,mysql int长度不够。
今天又纠结数据库里时间存储的问题,以往的经验,时区问题很繁琐,而mysql的date,datetime,timestamp都是和时区设置有关系的。(当然)
我认为一般设计数据库,时间存储的应该是UTC时间,这样便于物理和逻辑上的移植,对于国际化功能的应用更是如此。可以省去许多时区转换的麻烦,可以维持一致性。
网上也有这方面的讨论,大部分赞同int
例如:
Why MySQL’s (SQL) DATETIME can and should be avoided
对于性能,
下面的这篇文章的测试我认为具有片面性
MySQL DATETIME vs TIMESTAMP vs INT performance and benchmarking with MyISAM
其测试认为int 比datetime慢,但是其测试语句使用了相当多的mysql 日期函数,我们根本就不需要这样做,我们不需要使用数据库的日期函数,只要保证传入数据库的参数是int,像日期比较直接用int比较实际是比datetime要快的。
参照openfire的mysql设计,发现它根本就没有使用任何datetime,timestamp类型。而是用bigint或是char。
我的观点:
对于应用型数据库,不应该使用datetime。
对于需要在sql中嵌入逻辑的例如分析型数据仓库,数据管理员可能会倾向于使用datetime。
参见:
http://billauer.co.il/blog/2009/03/mysql-datetime-epoch-unix-time/