为什么使用TIMESTAMP而不是INT值



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

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

因为当你把日期当作日期而不是数字时,你可以做一些巧妙的事情,比如添加持续时间(date+1MONTH-1HOUR(。TIMESTAMPDATETIME等也针对日期进行了优化,并将为您进行本地验证。

原因有很多,我认为最明显的(也是最直接的(是数据库知道该值是TIMESTAMP(因此与日期/时间相关(,而INT则不是这样。

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

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

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

  • 11.3.1.DATEDATETIMETIMESTAMP类型

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

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

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

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

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

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

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

数据完整性确保我们不会意外地增加早餐吃的华夫饼的数量:(

如果我们试图输入一个无效的时间戳,MySQL会抛出一个错误,阻止我们输入坏数据。

相关内容

  • 没有找到相关文章