MySQL:什么是最好用的,Unix TimeStamp或DATETIME

Rya*_*yan 28 php mysql datetime unix-timestamp

可能很多程序员都想问这个问题.它是每种MySQL时间格式的冒险之源.以及您希望在应用中使用哪一个.

对我来说,我使用Unix时间戳,因为也许我觉得转换和订购记录很容易,也因为我从来没有尝试过DATETIME的事情.但无论如何,如果有人告诉我我错了,我准备改变主意.

谢谢

Pas*_*TIN 19

时间戳(PHP和MySQL的)都使用32位(即4字节)整数存储; 这意味着它们仅限于1970年至2038年的日期范围.

DATETIME没有那个限制 - 但是使用更多字节存储(8字节,如果我没有记错的话)


在存储PHP看到的时间戳或MySQL看到的时间戳之间:


并且,有关MySQL TIMESTAMPDATETIME数据类型之间的更多信息,请参阅10.3.1.DATETIME,DATE和TIMESTAMP类型

  • 谁在2038年使用32位系统? (4认同)
  • 它们有限_now_到32位:) (3认同)

Mic*_*son 10

正如其他人所说,时间戳可以代表较小的日期时间范围(从1970年到2038年).但是,时间戳测量自Unix Epoch(1970-01-01 00:00:00 UTC)以来的秒数,从而使它们独立于时区,而DATETIME存储没有时区的日期和时间.换句话说,时间戳明确地引用特定时间点,而DATETIME引用的确切时间点需要时区(其不存储在DATETIME字段中).要了解为什么这很重要,请考虑一下如果我们改变时区会发生什么.

假设我们要存储日期时间2010-03-27 12:00 UTC.如果我们存储它并使用时间戳或DATETIME检索它,那么通常似乎没有区别.但是,如果服务器现在更改以使本地时区为UTC + 01,那么如果我们提取日期时间,则会得到两个不同的结果.

如果我们将字段设置为DATETIME,它会将日期时间报告为2010-03-27 12:00,尽管时区发生了变化.如果我们将字段设置为时间戳,则日期将报告为2010-03-27 11:00.这对任何一种数据类型都不是问题 - 这只是因为它们存储的信息略有不同.


Dor*_*Dor 6

这确实取决于。我给你举两个例子,其中一个克服了另一个:

当您想要在数据库中存储用户会话并且会话创建时间(以时间戳格式)用于快速行检索(使用索引)时,时间戳比 DATETIME 更好。
例如,表可能如下所示:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
在前两列上建立索引确实可以加快查询速度。如果该字段具有 DATETIME 值类型session_create_time,则可能需要更多时间。考虑到每次用户请求页面时都会执行会话查询,因此效率至关重要。

当您想要存储用户的出生日期或一些需要灵活时间范围的历史事件时,DATETIME 比 Timestamp 更好。