【问题标题】:Is it better to store time data as an Int or a Timestamp?将时间数据存储为 Int 还是 Timestamp 更好?
【发布时间】:2012-06-12 23:03:26
【问题描述】:

使用 MySQL 时,我应该将时间数据存储为 Int,它是自 1970 年 1 月 1 日 UTC 午夜以来的毫秒数,还是数据库中的 Timestamp。

我知道两者都有优势,这是最好的方法吗?

【问题讨论】:

  • 无论您存储什么格式,总有可能将其转换为另一种格式。
  • 前 4 个谷歌结果中有 3 个是针对同一主题的 SO 问题,没有一个回答您的问题? google.com/…
  • TIME 类型不是一个选项吗?这似乎是最直接的。
  • 我个人将 DATETIME 用于我所有的时间数据......存储为 int 是没有意义的......多年来没有使用过 Timestamp...... DATETIME 是它所在的地方......
  • 当我输入问题时,没有相关问题出现,所以我认为问题还没有被问到

标签: mysql sql time


【解决方案1】:

不能从您的 PHP 代码的角度肯定地说,但是以 MySQL 日期时间格式存储它会打开所有 MySQL 日期/时间函数,而无需处理首先使用 FROM_UNIXTIME 进行转换。此外,时间戳有 2038 年的限制 - 请参阅 Why do timestamps have a limit to 2038?

正如 cmets 所说,您可以转换任何一种方式,因此问题在于您希望在哪里最方便 - 在您的 SQL 语句或 PHP 代码中。

恕我直言,时间/日期只是一个数字 - 它们在我们使用它们时有特殊目的,因此将它们存储为一个数字会限制你自己。

【讨论】:

    【解决方案2】:

    在 MySQL 中使用时间戳时还需要考虑其他几件事。

    您(不,请参阅下面的编辑)仅允许数据库中每个表有一个时间戳列

    您可以对时间戳列做的一件很酷的事情是,您可以在更新 CURRENT_TIMESTAMP 时使用默认的 CURRENT_TIMESTAMP(同样您只能得到一个可以执行此操作的列)。

    除此之外以及已经提到的其他内容,我认为这是使用这些列的唯一动机。

    编辑: 一张表中可以有多个时间戳列。但是,每个表只能有一个 DEFAULT CURRENT_TIMESTAMP 时间戳。请注意,如果您向表中添加列:

    ALTER TABLE table_name ADD COLUMN col_name TIMESTAMP

    并且该表中没有另一个时间戳列,它隐式地将其添加到定义中。至少在 MySQL 5.0.92 上。请参阅下面的讨论。

    【讨论】:

    • 每个表允许有多个TIMESTAMP 列。您可能认为您不能拥有多个设置了UPDATE CURRENT_TIMESTAMP 标志
    • 你说得对,我说错了。但你说的也不完全正确。如果您使用 DEFAULT CURRENT_TIMESTAMP 或 ON UPDATE CURRENT_TIMESTAMP,那么即使没有其他内容,您也不能拥有另一个时间戳列。我会编辑帖子。
    • 我不确定这是不是真的,我刚刚运行了CREATE TABLE table2 ( time1 timestamp NULL, time2 timestamp NULL ON UPDATE CURRENT_TIMESTAMP );,它成功了...
    • 我明白了。你说得对。我不知道的是,如果您使用没有修饰符的时间戳类型(NULL/DEFAULT/等),它会隐式添加 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。例如。此查询失败:CREATE TABLE table3 ( time1 timestamp, time2 timestamp ON UPDATE CURRENT_TIMESTAMP ); 我已经重新编辑了原始注释。
    猜你喜欢
    • 2012-07-17
    • 2014-10-31
    • 2012-12-26
    • 2014-06-17
    • 2011-08-26
    • 2016-06-08
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    相关资源
    最近更新 更多