【问题标题】:Unix timestamp vs datetime [duplicate]Unix时间戳与日期时间[重复]
【发布时间】:2011-02-26 06:28:47
【问题描述】:

可能重复:
Datetime vs Timestamp?

我有一个 Mysql 表,其中有一列 add_date。它跟踪记录添加到数据库的日期/时间。

基于此表的查询:

  1. 以以下格式显示添加记录的时间:2 小时前、4 周前、1 年前等
  2. 允许用户搜索任何日/月/年插入的记录。因此,可能允许用户选择仅查看 2009 年插入的记录。

在这种情况下哪个更好 - unix 时间戳或日期时间?

现在我同时使用两者,但由于随着时间的推移表将有数百万条记录,因此同时拥有这两个列可能会影响数据库的大小。

Unix 时间戳似乎更适合在 PHP 中转换为 2 hours ago 格式,而且它与时区无关。但是 datetime 具有更好的可读性,并且查询特定日期/时间/年份似乎更容易。

你的建议?

【问题讨论】:

    标签: php mysql sql datetime unix-timestamp


    【解决方案1】:

    如果您有选择,我会说选择 mySQL 日期。

    • 你不必照顾date range issues

    • 您可以使用 mySQL 的日期函数(BETWEEN(), DATE_ADD 等)轻松查询时间跨度

    • 与日期相关的查询会快得多,尤其是当您拥有数百万条记录时,因为您不必使用在大型查询中可能会很昂贵的FROM_UNIXTIME()

    • 在必要时将 DATE 字段转换为 UNIX 时间戳是小菜一碟。

    【讨论】:

    • 这个。如果您想在 php 端使用时间戳,只需使用 UNIX_TIMESTAMP(your_column)。但是在您的数据库中,使用本机日期类型来存储日期。此外,您数据库中的数据可能会被其他应用程序使用,这些应用程序可能更喜欢 SQL 日期格式而不是时间戳。
    • 相对于时区将日期转换为 unix 时间戳会有什么问题吗?
    • @Lost_in_code 实际上是个好问题。涉及许多因素,mySQL 服务器的时区设置,以及 PHP 默认使用的系统时区设置。通常,mySQL DATETIME 字段对时区不敏感。只要您将 UTC 日期存储在那里,您应该能够轻松地将它们转换为时间戳,但如果 mySQL 和/或 PHP 的时区与 UTC 不同,请小心。相关:stackoverflow.com/questions/18449/…
    【解决方案2】:

    您可以通过使用 unix 时间戳和 MySQL from_unixtime() 函数在需要时将结果转换为日期时间格式来获得两全其美。

    【讨论】:

    • 您还可以通过使用 datetime 并在必要时使用 date 函数转换为 unix 时间戳来获得两全其美的效果。鉴于使用 datetime 数据类型可以使许多查询变得更容易,我认为最好采用这种方式。
    • El Yobo 所说的。潜在的性能损失会让我在大表中回避from_unixtime()(虽然没有任何基准。)
    • 当然 from_unixtime() 不应该用于预期会产生大量数据的查询,只有那些返回要显示的结果集的查询。此外,日期时间类型仍可用于通过 unix_timestamp('2010-06-01 13:00') 使查询更具可读性。每次查询只进行一次转换,因此没有性能损失。
    【解决方案3】:

    我会选择 mysql 格式,因为 mysql 有很多 datetime 函数,使用它和时间戳会花费你另一个转换。

    但由于该表将有数百万 随着时间的推移记录,同时拥有 列可能会影响的大小 数据库。

    天哪。
    您真的担心额外增加 4 兆字节的空间吗?

    【讨论】:

    • 我真的不知道这会占用多少空间(我是大型数据库的新手)。如果你说它只是几个 MB,那么我认为两者都没有问题。
    • 如果你不知道这个数字,你不应该提到它。任何程序员都不应该猜测。这是天气预报员的工作。 dev.mysql.com/doc/refman/5.0/en/storage-requirements.html 会告诉你 datetime 需要 8 个字节和 int 作为时间戳 - 4。所以,4 * 1000000 = 小于 4Mb
    • 您可能还希望在这两个字段上都使用索引。这在空间方面并不算太昂贵,但如果您使用多个字段索引,它可能会影响您的性能。
    猜你喜欢
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2021-03-31
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2015-01-01
    相关资源
    最近更新 更多