您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
当前回答
在MySQL 5及以上版本中,TIMESTAMP值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。(这仅适用于TIMESTAMP数据类型,而不适用于DATETIME等其他类型。)
默认情况下,每个连接的当前时区是服务器的时间。可以根据每个连接设置时区,如MySQL Server时区支持中所述。
其他回答
DATETIME类型用于包含日期和时间部分的值。MySQL以格式检索并显示DATETIME值。支持的范围为。'YYYY-MM-DD hh:MM:ss''1000-01-01 00:00:00''9999-12-31 23:59:59'
TIMESTAMP数据类型用于包含日期和时间部分的值。TIMESTAMP的范围从“1970-01-01 00:00:01”UTC到“2038-01-19 03:14:07”UTC。
mysql> SELECT col,
> CAST(col AT TIME ZONE INTERVAL '+00:00' AS DATETIME) AS ut
> FROM ts ORDER BY id;
+---------------------+---------------------+
| col | ut |
+---------------------+---------------------+
| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 |
| 2019-12-31 23:40:10 | 2020-01-01 04:40:10 |
| 2020-01-01 13:10:10 | 2020-01-01 18:10:10 |
| 2020-01-01 10:10:10 | 2020-01-01 15:10:10 |
| 2020-01-01 04:40:10 | 2020-01-01 09:40:10 |
| 2020-01-01 18:10:10 | 2020-01-01 23:10:10 |
+---------------------+---------------------+
URL MySQL 8.0:https://dev.mysql.com/doc/refman/8.0/en/datetime.html
主要区别在于
时间戳上的索引-有效日期时间上的索引-不起作用
看看这篇文章,看看Datetime索引的问题
我发现TIMESTAMP能够基于当前时间自动更新自己,而不使用不必要的触发器,这一点非常有用。虽然TIMESTAMP是UTC,但这只是我自己。
它可以跟踪不同的时区,因此如果您需要显示相对时间,例如UTC时间就是您想要的。
DATETIME与TIMESTAMP:
TIMESTAMP用于跟踪记录的更改,并在每次更改记录时进行更新。
DATETIME用于存储不受记录更改影响的特定静态值。
TIMESTAMP也受不同时区相关设置的影响。DATETIME是常量。
TIMESTAMP在内部将当前时区转换为UTC进行存储,并在检索期间将其转换回当前时区。
DATETIME无法执行此操作。
TIMESTAMP为4字节,DATETIME为8字节。
TIMESTAMP支持的范围:1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTCDATETIME支持的范围:“1000-01-01 00:00:00”至“9999-12-31 23:59:59”
我总是使用Unix时间戳,只是为了在处理大量日期时间信息时保持理智,尤其是在调整时区、添加/减去日期等时。在比较时间戳时,这排除了时区的复杂因素,并允许您在服务器端处理(无论是应用程序代码还是数据库查询)中节省资源,因为您使用了较轻的算术,而不是较重的日期时间加减函数。
另一件值得考虑的事情:
如果您正在构建一个应用程序,那么您永远不知道您的数据可能会被如何使用。如果你最终不得不将数据集中的一堆记录与第三方API中的一堆项目进行比较,然后按照时间顺序排列,你会很高兴为你的行设置Unix时间戳。即使您决定使用MySQL时间戳,也要存储Unix时间戳作为保险。