繁体   English   中英

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

[英]What datatype should I use to store time() in MySQL for my application?

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

申请目的

  1. 最简单的是,我想记录活动的开始,停止(和持续时间)。 可能使用time()。
  2. 在最复杂的情​​况下,我想根据用户何时进行某项活动,他们花费多少时间进行活动(总计),以及何时最成功/最不成功等等(均为根据开始/结束时间)记住一些事情。 用户将来自世界各地。

更多信息如果重复某项活动,将为其创建一条新记录。 记录不会更新。

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

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

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

谢谢

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

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

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

使用DATETIME存储时间和使用date('Ymd H:i:s')以获取存储它的当前时间。 获取此值时,您将获得此格式的时间。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM