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

2022-08-30 12:44:05

可能很多程序员都想问这个问题。这是这些MySQL时间格式的冒险之处。以及您更喜欢在应用程序中使用它的哪一个。

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

谢谢


答案 1

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

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


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


而且,有关MySQL和数据类型之间的更多信息,请参阅10.3.1。日期时间、日期和时间戳类型TIMESTAMPDATETIME


答案 2

正如其他人所说,时间戳可以表示较小的日期时间范围(从1970年到2038年)。但是,时间戳测量自 Unix 时代 (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。这不是任何一种数据类型的问题 - 这只是它们存储的信息略有不同的结果。


推荐