可能很多程序员都想问这个问题。它是每一种 MySQL 时间格式的新奇之处。以及您更喜欢在您的应用程序中使用哪一个。
对我来说,我使用 Unix 时间戳,因为也许我发现用它转换和订购记录很容易,也因为我从未尝试过 DATETIME 的事情。但无论如何,如果有人告诉我我错了,我已经准备好改变主意了。
谢谢
可能很多程序员都想问这个问题。它是每一种 MySQL 时间格式的新奇之处。以及您更喜欢在您的应用程序中使用哪一个。
对我来说,我使用 Unix 时间戳,因为也许我发现用它转换和订购记录很容易,也因为我从未尝试过 DATETIME 的事情。但无论如何,如果有人告诉我我错了,我已经准备好改变主意了。
谢谢
时间戳(PHP 和 MySQL 的)使用 32 位(即 4 字节)整数存储;这意味着它们仅限于从 1970 年到 2038 年的日期范围。
DATETIME
没有那个限制——但是使用更多字节存储(8字节,如果我没记错的话)
之后,在存储 PHP 所见的时间戳或 MySQL 所见的时间戳之间:
而且,有关 MySQLTIMESTAMP
和DATETIME
数据类型之间的更多信息,请参阅10.3.1。DATETIME、DATE 和 TIMESTAMP 类型
正如其他人所说,时间戳可以代表较小范围的日期时间(从 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。这对任何一种数据类型都不是问题——这只是它们存储的信息略有不同的结果。
这真的取决于。我会给你两个例子,其中一个克服另一个:
当您想要将用户会话存储在数据库中并且会话创建时间(以时间戳格式)用于快速行检索(带索引)时,时间戳优于 DATETIME。
例如,表可能看起来像这样:
[session_create_time AS Timestamp][IP_address AS 32bit Int][etc...]
在前两列上有一个索引可以真正加快您的查询速度。如果您有该session_create_time
字段的 DATETIME 值类型,则可能需要更多时间。考虑到每次用户请求页面时都会执行会话查询,因此效率至关重要。
当您要存储用户的出生日期或一些需要灵活时间范围的历史事件时,DATETIME 比 Timestamp 更好。
除非将 1970 年 1 月 1 日之前的记录数字化,否则我喜欢 UNIX 时代。这只是一个偏好问题,在使用多种语言时,整个无符号数字更容易处理。
请记住,这个时代始于 1970 年 1 月 1 日。在此之前,许多公司已经经营了几十年,甚至更长时间。