【问题标题】:What datatype should I use to store time() in MySQL for my application?我应该使用什么数据类型在 MySQL 中为我的应用程序存储 time()?
【发布时间】:2012-02-27 05:23:22
【问题描述】:

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

申请目的

  1. 最简单的方法是,我想记录一个事件的开始、停止(和持续时间) 活动。可能使用 time()。
  2. 在最复杂的情​​况下,我想根据何时绘制统计数据 用户做了某项活动,他们花了多少时间做 活动(总计),以及何时最成功/最不成功 成功等,等等(都基于开始/结束时间) 记住。用户将来自世界各地。

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

起初,我计划在 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 内置的时间功能。无论如何,再次感谢您的回答。

【问题讨论】:

  • @zerkms 为什么推荐时间戳?
  • 因为它支持所有datetime 功能并且还知道时区

标签: php mysql datetime


【解决方案1】:

使用 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 仅在您在具有不同时区的两台机器之间主动同步原始数据时才有用

【讨论】:

  • 感谢您的回复。为什么你推荐 DATETIME 而不是 MySQL 的 TIMESTAMP?
  • TIMESTAMP 只能存储 1970 年 1 月 1 日之后的值,因为它存储时区数据。因此,如果您尝试存储 1970 年 1 月 1 日之前的日期,最好使用 DATETIME。 TIMESTAMP ,我同意存储 TimeZone 数据,但它仅在您有两台集群在一起的服务器时才有用,但使用不同的 tz 数据。无论如何,你可以使用 php 来适应它
  • @SomeshMukherjee TIMESTAMP 不存储时区数据,它以 UTC 存储所有内容,并在读取时自动从 UTC 转换为您的本地时区,在写入时从您的本地时区自动转换为 UTC。 TIMESTAMP 的范围确实小于DATETIME 的范围。
  • 这就是我想说的,我的错。我有时过于简单了
【解决方案2】:

如果您要去世界各地,MySQL 的TIMESTAMP 几乎是普遍适用于DATETIME 的好选择,因为它将时间存储为 UTC 而不是本地时间,因此如果多次分析 DST 更改不会给您带来问题区域。

以非 DST 更改时区为基准可以节省生命,在具有不同 DST 更改日期的多个时区之间转换确实会导致问题,例如,考虑在一个小时内有一个时间戳在从夏至冬时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多