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/

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1