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的字段.
这让我有以下几点:
存储为INT的Unix时间戳更快,占用更少的空间,并且可以在PHP的基于时间()的计算中原生工作.
MySQL日期类型更适合MySQL方面的操作和逻辑.
目前,Unix和MySQL时间戳只能在2037年之前工作,这意味着您必须在将来使用日期时间字段表示更大的日期.
date = NOW()使用复制导致数据不一致时,MySQL命令可能会滞后.
所以将这个应用到现实生活中我们看到这些结果给出的答案,大多数真正的DBA会使用像PostgreSQL这样的更好的引擎 - 是否有arny
但是,大多数使用数据库逻辑的应用程序可能会使用PostgreSQL.这意味着我们所有其他程序员只使用MySQL作为我们数据的存储槽(你知道这是真的)这使得保持字段小,快,UNIX INT看起来它实际上是最好的选择.
那你觉得怎么样?
时间戳是否真的比MySQL日期字段更适合PHP应用程序?
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位问题.感谢查尔斯在下面的评论,指出了使用它的好方法.