3

可能重复:
MySQL 中各种日期/时间字段类型的优缺点是什么?

在很多数据库中,我看到他们使用TIMESTAMP类型来存储时间值,我的问题是为什么不使用INT类型来存储$date->getTimestamp()值,然后我们可以更容易地获取时间值?

4

6 回答 6

7

因为当您将日期视为日期而不是数字时,您可以做一些简洁的事情,例如添加持续时间 (DATE+1MONTH-1HOUR)。TIMESTAMPDATETIME也针对日期进行了优化,并将为您进行本机验证。

于 2013-01-06T16:22:32.820 回答
2

可能有很多原因,我想说最明显(也是直截了当的一个)是数据库知道该值是 a TIMESTAMP(因此与日期/时间相关),而INT.

这有几个后果,例如 Mysql 知道时区并自动TIMESTAMP与 UTC 协调。这意味着数据更加具体,因为数据的含义很清楚。对于INT您需要自己处理的类型,它不再与数据库相关。

下一个重大区别是自动初始化和更新。这意味着,如果插入或更改行,TIMESTAMP列将被“标记”为当前时间。

这些类型之间还有其他一些差异,其中大部分与数据/时间函数有关。我建议你深入研究:

于 2013-01-06T16:25:17.037 回答
1

当使用时间戳而不是普通数字时,您可以在数据库中做更多的事情。按星期查询、按月分组、确定间隔等...

于 2013-01-06T16:23:37.983 回答
1

一个 int 只有 4 个字节,而 datetime 是 8 个字节,所以你可能有更少的值。特别是对于 php,您将获得最小日期为 1901-12-13 和最大日期为 2038-01-19 的 Unix 时间戳。这本质上是回溯并做出导致 Y2K 问题的相同决定。假设您可以忍受,您应该没问题,但是非基于 Unix 的主机呢?

于 2013-01-06T16:24:14.033 回答
1

因为不必公开数据的实际表示。为什么?

  • 灵活性(数据的内部表示可能随时更改,用户不会依赖它)。

  • 可靠性(如果数据库知道数据是什么,它可能会检查数据的一致性)

  • 可读性(没有理由将时间戳视为整数,它显示了记录的含义)

于 2013-01-06T16:24:46.257 回答
1

之所以有不同的数字类型(例如时间戳),是为了提供数据完整性。

数据完整性确保我们不会意外放入早餐的华夫饼数量 :)

如果我们尝试输入无效的时间戳,MySQL 将抛出错误并阻止我们输入错误数据。

于 2013-01-06T16:25:31.180 回答