协慌网

登录 贡献 社区

我应该在 MySQL 中使用日期时间或时间戳数据类型吗?

您会建议使用日期 时间时间戳字段,以及为什么(使用 MySQL)?

我在服务器端使用 PHP。

答案

MySQL 中的时间戳通常用于跟踪记录的更改,并且通常在每次更改记录时更新。如果要存储特定值,则应使用 datetime 字段。

如果您想要在使用 UNIX 时间戳或本机 MySQL 日期时间字段之间做出决定,请使用本机格式。您可以在 MySQL 中以这种方式进行计算("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)") ,当您查询记录时,可以很容易地将值的格式更改为 UNIX 时间戳("SELECT UNIX_TIMESTAMP(my_datetime)")如果你想用 PHP 操作它。

在 MySQL 5 及更高版本中, TIMESTAMP值从当前时区转换为 UTC 以进行存储,并从 UTC 转换回当前时区以进行检索。 (这仅适用于 TIMESTAMP 数据类型, 而不适用于其他类型,例如 DATETIME。)

默认情况下,每个连接的当前时区是服务器的时间。可以在每个连接的基础上设置时区,如MySQL 服务器时区支持中所述

我总是将 DATETIME 字段用于行元数据以外的任何内容(创建或修改日期)。

至于提到的 MySQL 文档中:

当您需要包含日期和时间信息的值时,将使用 DATETIME 类型。 MySQL 以'YYYY-MM-DD HH:MM:SS' 格式检索并显示 DATETIME 值。支持的范围是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。

...

TIMESTAMP 数据类型的范围为 '1970-01-01 00:00:01'UTC 到 '2038-01-09 03:14:07'UTC。它具有不同的属性,具体取决于 MySQL 版本和运行服务器的 SQL 模式。

在一般情况下,你很有可能达到 TIMESTAMPs 的下限 - 例如存储生日。