我应该使用什么数据类型在MySQL中为我的应用程序存储time()?

时间:2012-02-05 09:27:16

标签: php mysql datetime

我计划在php中使用time()捕获用户启动的活动的开始和结束。我不确定这是否是捕获开始/结束时间的最佳方式。无论如何,数据将存储在MySQL中,但我不知道我应该使用哪种数据类型。 根据我在stackoverflow上读到的答案,使用的数据类型取决于应用程序的用途。

申请的目的

  1. 最简单的,我想记录一个的开始,停止(和持续时间) 活动。可能使用time()。
  2. 在最复杂的情​​况下,我想根据时间绘制统计数据 用户做了一定的活动,他们花了多少时间做 活动(总计),以及何时最成功/最少 成功等等(所有基于开始/结束时间)的东西 记住。用户将来自世界各地。
  3. 更多信息 如果重复某项活动,将为其制作新记录。记录不会更新。

    起初,我曾计划在MySQL中存储unix时间戳(作为整数数据类型?),但据我所知这是一个坏主意,因为我将失去很多MySQL处理信息的能力。如果我将信息存储为DATETIME,但随后移动服务器,则所有时间都将根据服务器的本地时间而改变。我发现令人困惑的是MySQL中的TIMESTAMP与unix时间戳不同 - 如果我使用time(),这就是我将要获得的。

    我知道unix时间戳只能为某些系统保留最多2038的日期,但这不是一个问题(目前)。

    问题:我应该使用time()来捕获用户启动的活动的开始和结束时间吗?根据申请的目的,what datatype should I use to store the start and stop of user initiated activities?

    感谢

    感谢大家的答案。 TBH我还不确定,所以我还在做一些研究。我选择了TIMESTAMPS选项,因为我真的想用UTC(GMT)存储我的信息。遗憾的是,我将失去一些内置时间函数的MySQL。无论如何,再次感谢您的回答。

2 个答案:

答案 0 :(得分:4)

使用DATETIME存储时间并使用date('Y-m-d H:i:s')获取当前存储时间。当您获取此值时,您将获得此格式的时间。

要将其转换为时间戳,请使用$timestamp=strtotime($fetchedValue)要以其他格式显示,请使用date('H:i',$timestamp)。阅读php日期手册中的格式

TIMESTAMP只能在1970年1月1日之后存储值,因为它存储时区数据。 因此,如果您尝试在1970年1月1日之前存储日期,则最好使用DATETIME。

坦率地说,只有在两台具有不同时区的计算机之间主动同步原始数据时,TIMESTAMP才有用

答案 1 :(得分:4)

如果你要去世界各地,MySQL TIMESTAMP几乎普遍是DATETIME的一个很好的选择,因为它将时间存储为UTC而不是本地时间,因此DST更改不会导致问题,如果在多个时区进行分析。

将非DST更改时区作为基础可以节省生命,在具有不同DST转换日期的多个时区之间进行转换确实会导致问题,例如考虑在小时内发生两次更改的时间戳夏天到冬天。