可能重复:
MySQL中各种日期/时间字段类型的优缺点是什么?
在很多数据库中,我看到他们使用TIMESTAMP
类型来存储时间值,我的问题是为什么不使用INT
类型来存储$date->getTimestamp()
值,这样我们可以更容易地获得时间值?
因为当你把日期当作日期而不是数字时,你可以做一些巧妙的事情,比如添加持续时间(date+1MONTH-1HOUR(。TIMESTAMP
、DATETIME
等也针对日期进行了优化,并将为您进行本地验证。
原因有很多,我认为最明显的(也是最直接的(是数据库知道该值是TIMESTAMP
(因此与日期/时间相关(,而INT
则不是这样。
这有几个后果,例如Mysql知道时区并自动将TIMESTAMP
协调到UTC。这意味着数据要具体得多,因为数据的含义很清楚。对于您需要自己处理的INT
类型,它将不再是相对于数据库的。
下一个大区别是自动初始化和更新。这意味着,如果插入或更改了行,TIMESTAMP
列将被"标记"为当前时间。
这些类型之间还有其他一些差异,其中大多数与数据/时间函数有关。我建议你深入研究:
- 11.3.1.
DATE
、DATETIME
和TIMESTAMP
类型
当使用时间戳而不是普通数字时,您可以在数据库中做更多的事情。按星期几查询,按月分组,确定间隔等。
int只有4个字节,datetime是8个字节,所以可能的值更少。特别是对于php,您将获得Unix时间戳,其最小日期为1901-12-13,最大日期为2038-01-19。这基本上是在倒退,并做出导致Y2K问题的相同决定。假设你能忍受这种情况,你应该没事,但非Unix主机呢?
因为数据的实际表示不必公开。为什么?
-
灵活性(数据的内部表示可能随时更改,用户不会依赖它(。
-
可靠性(如果数据库知道数据是什么,它可以检查数据的一致性(
-
可读性(没有理由将时间戳视为整数,它显示了记录的含义(
之所以有不同的数字类型(如时间戳(,是为了提供数据完整性。
数据完整性确保我们不会意外地增加早餐吃的华夫饼的数量:(
如果我们试图输入一个无效的时间戳,MySQL会抛出一个错误,阻止我们输入坏数据。