MySQL的日期时间和时间戳字段是否更适合PHP应用程序,然后是Unix时间戳整数?

Xeo*_*oss 8 php mysql int timestamp

我正在阅读一篇文章,该文章展示了一些关于三种不同的MySQL日期/时间存储选项执行情况的非常好的信息和基准.

MySQL DATETIME与TIMESTAMP对比INT性能和与MyISAM的基准测试

在阅读本文时,您开始意识到使用整数只是一种浪费,您应该使用MySQL Datetime或Timestamp列类型.

然而,在文章的最后,他再做了一次不使用MySQL函数的测试,你突然发现直接INT的速度是使用unix时间戳搜索时两个MySQL选项的2倍.

所以它突然恍然大悟 - 呃,PHP应用程序都使用了什么? 时间()!几乎每个php应用程序都将其逻辑基于Unix Epoch.这意味着在特定时间内对结果的大多数查询都是基于time()开始的,然后转换为使用MySQL的字段.

这让我有以下几点:

  1. 存储为INT的Unix时间戳更快,占用更少的空间,并且可以在PHP的基于时间()的计算中原生工作.

  2. MySQL日期类型更适合MySQL方面的操作和逻辑.

  3. 目前,Unix和MySQL时间戳只能在2037年之前工作,这意味着您必须在将来使用日期时间字段表示更大的日期.

  4. date = NOW()使用复制导致数据不一致时,MySQL命令可能会滞后.

所以将这个应用到现实生活中我们看到这些结果给出的答案,大多数真正的DBA会使用像PostgreSQL这样的更好的引擎 - 是否有arny

但是,大多数使用数据库逻辑的应用程序可能会使用PostgreSQL.这意味着我们所有其他程序员只使用MySQL作为我们数据的存储槽(你知道这是真的)这使得保持字段小,快,UNIX INT看起来它实际上是最好的选择.

那你觉得怎么样?

时间戳是否真的比MySQL日期字段更适合PHP应用程序?

tho*_*ter 9

MySQL的日期格式没有2038年的问题.

从1000年到9999年,MySQL的日期是可靠的,而Unix时间戳可能会在2038年之后或1902年之前搞砸,除非系统中的所有内容都是64位.

但是,如果您使用的是PHP,这可能没有实际意义:PHP在其大多数日期和时间函数中使用unix时间戳记来表示日期和时间,除非您使用的是64位版本,否则它将具有相同的限制.

您将使用专门用于此目的的字段类型.

如果你在意.将日期作为unix时间戳放入INT字段不是自描述的; 如果不以适当的方式转换数据,则无法查看数据.但这可能对你没有任何影响.

考虑到你正在使用PHP,这方面的另一面是,一旦你花时间进入PHP,你必须将它转换回Unix时间戳,无论如何要用它做任何有用的事情,因为对PHP来说,Unix的时间戳是当地人.

编辑:

回到我写这个答案时,我没有使用PHP的DateTime类.使用DateTime类可以消除使用Unix时间戳的任何需要,并消除32/64位问题.感谢查尔斯在下面的评论,指出了使用它的好方法.

  • 现代PHP的[DateTime](http://us2.php.net/manual/en/book.datetime.php)类在内部使用[64位时间戳](http://us2.php.net/manual/en /intro.datetime.php)并没有遭受Y2038错误.构造函数使用[strtotime](http://us2.php.net/manual/en/function.strtotime.php)来解析传递的时间戳,并且在没有任何强制的情况下理解MySQL的日期时间格式.新的,现代的PHP应用程序应该使用DateTime而不是整数时间戳. (14认同)