PHP - 在mysql中存储unix时间戳(避免time_t溢出)

时间:2013-08-07 02:52:50

标签: php mysql unix timestamp year2038

我刚刚意识到当unix时间被重置为负的最小范围时,2038年的问题,所以我决定对这个有趣的话题进行一些研究。

现在我正在设计数据库的结构(在mysql中),我认为这两个注意事项可能会解决问题:

1) - 将时间数据存储在时间戳字段中,但存储在bigint(或更大)列中。

2) - 我将用于我的应用程序的服务器使用64位操作系统,因此如果我使用php日期函数,它将正确返回日期。

基于这些考虑因素,我即将接受使用时间戳,你怎么看待它?感谢的..

1 个答案:

答案 0 :(得分:0)

MySQL DATETIME列的范围一直到9999-12-31 23:59:59所以如果您担心Y2K38问题,我建议您使用这些而不是TIMESTAMP

TIMESTAMP超过DATETIME的唯一优势是自动时区转换,但我们倾向于将所有时间都存储为UTC,这对我们来说不是问题。

如果确实想要使用时间戳,那么我很确定在2038年之前将会有一致的努力将MySQL和C系统升级到time_t更多范围。由于它是C下的一个独特类型,因此更新起来相当容易。

而且,与C中的平面文件不同,迁移数据库数据要简单得多,因为列元数据(例如 列包含时间戳)很容易获得。