Php MySQL:What';最好使用Unix时间戳或日期时间戳

Php MySQL:What';最好使用Unix时间戳或日期时间戳,php,mysql,datetime,unix-timestamp,Php,Mysql,Datetime,Unix Timestamp,可能很多程序员都想问这个问题。这就是每种MySQL时间格式的优点所在。以及您更愿意在应用程序中使用哪一个 对我来说,我使用Unix时间戳是因为我发现用它转换和订购记录很容易,而且我从来没有尝试过DATETIME。但无论如何,如果有人告诉我我错了,我准备改变主意 感谢使用32位(即4字节)整数存储时间戳(PHP的和MySQL的);这意味着它们被限制在从1970年到2038年的日期范围内 DATETIME没有这个限制——但是存储时使用了更多的字节(如果我没有弄错的话,请使用8个字节) 之后,在存储

可能很多程序员都想问这个问题。这就是每种MySQL时间格式的优点所在。以及您更愿意在应用程序中使用哪一个

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

感谢

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

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


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

  • 使用PHP时间戳意味着从PHP进行操作更容易——请参阅
  • 使用MySQL的时间戳意味着MySQL的操作更容易——请参阅


而且,有关MySQL的
时间戳
日期时间
数据类型之间的更多信息,请参见除非在1970年1月1日之前对记录进行数字化,否则我喜欢UNIX时代。这只是偏好的问题,当使用多种语言时,处理完整的无符号数字更简单


请记住,新纪元始于1970年1月1日。许多公司在此之前已经经营了几十年,甚至更长时间。

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

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


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

这要视情况而定。我将给出两个例子,其中一个克服了另一个:

当您希望在数据库中存储用户会话,并且会话创建时间(以时间戳格式)用于快速行检索(带索引)时,时间戳优于日期时间。
例如,表格可能如下所示:
[会话创建时间作为时间戳][IP地址作为32位整数][等]

在前两列上建立索引确实可以加快查询速度。如果在
会话\u创建\u时间
字段中有一个DATETIME值类型,则可能需要更多的时间。考虑到每次用户请求页面时都会执行会话查询,因此效率至关重要


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

类似:它们现在被限制为32位:)2038年谁在使用32位系统?
new java.util.date().getTime()已经是64位的.Unix时间戳,以有符号的32位整数表示,可以存储1901年的所有日期,因为它可以从-2147483647(1901年12月13日8:45:53下午UTC)到2147483647(2038年1月19日3:14:07上午UTC)@LukeStevenson,你已经在每个问题中发布了这个。我想知道除了提供信息之外,你还想通过这样做实现什么?使用您试图指出的UNIX时间戳有什么缺点吗?UNIX时间戳是有符号的32位整数,它可以存储1901年的所有日期,因为它可以跨越-2147483647(1901年12月13日8:45:53 PM UTC)到2147483647(2038年1月19日3:14:07 AM UTC)UNIX时间戳,是有符号的32位整数,可以存储1901年的所有日期,因为它可以从-2147483647(1901年12月13日8:45:53下午UTC)到2147483647(2038年1月19日3:14:07上午UTC)。因此,除非您存储的是1901年之前的日期,否则时间戳将起作用。Unix时间戳是一个有符号的32位整数,它可以存储一直追溯到1901年的日期,因为它的范围可以从-2147483647(1901年12月13日8:45:53 PM UTC)到2147483647(2038年1月19日3:14:07 AM UTC)