为什么要使用TIMESTAMP而不是INT值?

时间:2013-01-06 16:18:20

标签: php sql datetime

  

可能重复:
  What are the pros and cons of the various date/time field types in MySQL?

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

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

可能有很多原因,我说最明显的(直截了当的)是数据库知道该值是TIMESTAMP(因此日期/时间相关) ),INT不是这种情况。

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

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

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

答案 2 :(得分:1)

使用时间戳而不是普通数字时,您可以在数据库中执行更多操作。按星期查询,逐月查询,确定间隔等...

答案 3 :(得分:1)

int只有4个字节,日期时间是8个字节,因此您可能的值较少。特别是对于php,你得到的是Unix时间戳,其最小日期为1901-12-13,最大值为2038-01-19。这基本上是回归并做出导致Y2K问题的同样决定。假设你可以忍受,那你应该没问题但是基于非Unix的主机呢?

答案 4 :(得分:1)

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

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

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

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

答案 5 :(得分:1)

有不同数字类型(如时间戳)的原因是提供数据完整性。

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

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