TIMESTAMP和DATETIME在`created`和`updated`列中的使用区别

3

我正在使用PHP/MySQL,一直使用DATETIME来存储createdupdated值,但我认为可能有更好的方法。

我应该使用TIMESTAMP吗?如果是这样,为什么?


2
可能是datetime vs timestamp?的重复问题。 - OMG Ponies
2个回答

1

文档指出:

TIMESTAMP 值在存储时会从当前时区转换为 UTC,检索时再从 UTC 转换回当前时区(这仅适用于 TIMESTAMP 数据类型,而不适用于其他类型,如 DATETIME)。默认情况下,每个连接的当前时区都是服务器时间。可以按连接设置时区,如第 9.6 节“MySQL 服务器时区支持”中所述。只要时区设置保持不变,您就可以获取与存储相同的值。如果您存储 TIMESTAMP 值,然后更改时区并检索该值,则检索到的值与存储的值不同。这是因为在两个方向的转换中没有使用相同的时区。当前时区可用作 time_zone 系统变量的值。

因此,如果您希望将日期/时间存储在 UTC 而不是当前时区中,则可以使用 TIMESTAMP


根据你的回答,可以说,在处理时区时,DateTime类型将该责任传递给你的业务逻辑,而TimeStamp类型则将该责任传递给服务器时间(或取决于操作系统中的设置)?从这个意义上讲,正确的答案不应该是DateTime吗?因为我们程序员可以更好地控制将时间存储在UTC中,而不考虑操作系统中的设置。 - Antony

0

时间戳在数据库中以协调世界时(UTC)存储。然后,根据您的时区设置,每次获取它时都会自动调整偏移量。如果您关心为应用程序设置时区,则一定要使用时间戳。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接