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

MySQL: What's the best to use, Unix TimeStamp Or DATETIME

本问题已经有最佳答案,请猛点这里访问。

可能很多编码人员都想问这个问题。这就是每种MySQL时间格式的出现。你更喜欢在你的应用中使用它。

对于我来说,我使用Unix时间戳是因为也许我发现用它转换和排序记录很容易,而且还因为我从未尝试过日期时间。但无论如何,如果有人告诉我我错了,我准备改变主意。

谢谢


时间戳(包括php和mysql)是使用32位(即4字节)整数存储的;这意味着它们被限制在1970年到2038年的日期范围内。

DATETIME没有这个限制——但是存储时使用了更多的字节(如果我没有弄错的话,是8个字节)

之后,在存储php看到的时间戳或mysql看到的时间戳之间:

  • 使用php时间戳意味着从php操作更容易——参见日期/时间函数
  • 使用mysql的时间戳意味着mysql更容易操作——见11.6。日期和时间函数

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


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

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

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


那要看情况而定。我给你两个例子,其中一个克服了另一个:

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

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


除非在1970年1月1日之前数字化记录,否则我喜欢Unix时代。这只是一个偏好问题,当使用多种语言时,整个无符号数字更容易处理。

记住,这个时代始于1970年1月1日。在此之前,很多公司已经经营了几十年,如果不是更长的话。