用PHP提取服务器时间并存储在MySQL中 - Unix时间戳好吗?

时间:2012-10-13 20:54:05

标签: php mysql datetime

所有

我正在尝试决定如何处理依赖于(服务器)时间间隔的项目中的时间(简而言之,在用户至少n小时之前完成特定操作后,某些内容可用)。现在,似乎最简单的选择是用time()提取Unix时间戳并将其存储在MySQL中。

为什么这不是个好主意?我需要注意的任何问题?绩效影响?

3 个答案:

答案 0 :(得分:2)

对我来说似乎很好。虽然您应该将其存储为 DATETIME 并使用 DateTime 对象,而不是UNIX时间戳和time()

$time = new DateTime;
echo $time->format("Y-m-d H:i:s"); //Outputs current time, example: 2012-10-13 22:58:34

答案 1 :(得分:2)

时间戳很好。不要分开它们,这是不必要的计算。如果您计划查询(每个对象)更多的超时而不是更新它,那么您最好存储过期时间而不是当前(因此只计算一次delta)。注意DATETIME列:它们不考虑时区设置,而你的PHP确实...所以如果你碰巧在不同的请求上有不同的时区设置,那么你就不走运了。时间戳是绝对的,它们也像日光节约时间一样,其中3:01是1:59之后的2分钟......

答案 2 :(得分:1)

实际上,这是最好的主意。函数time()为您提供从1970年1月1日00:00:00开始的秒数。没有性能影响,因为它只是integer。在MySQL中,创建一个类似INT, 10, Unsigned的字段。

时间将为您提供SELECT和WHERE的表现。见http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/

你遇到的唯一问题是:时间仅限于2038年...但是到了2038年,内部计算机时钟字节将会更大......希望如此。

您可能想要担心DATETIME的另一件事是:PHP time()在UTC下运行,而DATETIME依赖于时区......

使用10000000行进行INSERT时的统计信息。

enter image description here

使用索引SELECT / WHERE时的统计信息:

enter image description here