【问题标题】:Datatype to store dates in mySQL在 mySQL 中存储日期的数据类型
【发布时间】:2013-06-24 08:03:19
【问题描述】:

我无法找到好的答案的快速问题。当我开始使用 PHP 和 mySQL 时,我学会了将日期/时间存储为 Unix 时间戳。 mySQL 数据类型是 BIGINT,PHP 的 date 函数在处理这个问题上做得很好。当我查看文档等时,似乎 Timestamp 数据类型变得更加突出。存储日期的 BIGINT 方式是否已过时?对于现在使用哪种方法更好,是否有一个普遍的思想流派?

我知道时间戳数据类型对于默认值或更新具有“当前时间戳”,这很好。

想法?

提前致谢

【问题讨论】:

  • 还有 DATE 和 DATETIME 数据类型,我通常使用其中一种。

标签: php mysql sqldatatypes


【解决方案1】:

我要给出的主要论点是这种数据类型是为这项工作而设计的。

timestamp 的一个优势是软件可以理解数字实际上是一个日期,并且会显示一个人类可读的日期。当您将日期存储为 ints 时,这始终是一个问题。

要记住的一点是,timestamp 不适用于 1970 年 1 月 1 日之前的日期,但这与 int 方法没有什么不同。

【讨论】:

  • 感谢您的意见。如果您允许签名整数,从技术上讲,整数在 1970 年之前就可以工作,但我很少这样做。不过,这提出了另一个问题。我使用 BIGINT,所以 2038 上限不会影响我。时间戳如何/将如何处理?
  • 来自 dev.mysql.com > TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC . -- 我假设当需要时他们会找到增加上限的方法。如果您担心另一个千年虫,您可以在 25 年后担心它。
【解决方案2】:

Andrew,您不应该使用任何类型的 INT 数据类型来保存日期。 MySQL 提供了很多选项,例如 TIMESTAMP(如您所提到的)、DATETIME、DATE、TIME、YEAR。您还可以更轻松地使用本机 MySQL 时间函数。因此,没有理由真正使用任何其他数据类型。

[编辑]

MYSQL documentation 非常清楚它的数据类型:

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values in ‘YYYY-MM-DD HH:MM:SS’ format. The supported range is ’1000-01-01 00:00:00′ to ’9999-12-31 23:59:59′.

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of ’1970-01-01 00:00:01′ UTC to ’2038-01-19 03:14:07′ UTC.

【讨论】:

  • 就像我说的时间戳类型对我来说是新的。它适用于 PHP 吗?它只是将它视为一个字符串,还是我可以使用 date() 函数来格式化它?还有这些将如何处理 2038 年的上限?
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2022-01-08
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多