您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
您建议使用datetime或timestamp字段吗?为什么(使用MySQL)?
我在服务器端使用PHP。
当前回答
如果您想保证您的应用程序在2038年2月无法运行,请使用TIMESTAMP。有关支持的日期范围,请参阅REFMAN。
其他回答
到目前为止,还没有提到DEFAULT CURRENT_TIMESTAMP只适用于时间戳,而不适用于DateTime类型字段。
这与只能使用DateTime而不能使用Timestamp的MS Access表相关。
我总是使用Unix时间戳,只是为了在处理大量日期时间信息时保持理智,尤其是在调整时区、添加/减去日期等时。在比较时间戳时,这排除了时区的复杂因素,并允许您在服务器端处理(无论是应用程序代码还是数据库查询)中节省资源,因为您使用了较轻的算术,而不是较重的日期时间加减函数。
另一件值得考虑的事情:
如果您正在构建一个应用程序,那么您永远不知道您的数据可能会被如何使用。如果你最终不得不将数据集中的一堆记录与第三方API中的一堆项目进行比较,然后按照时间顺序排列,你会很高兴为你的行设置Unix时间戳。即使您决定使用MySQL时间戳,也要存储Unix时间戳作为保险。
参考本条:
主要区别:
TIMESTAMP用于跟踪记录的更改,并在每次更改记录时进行更新。DATETIME用于存储不受记录更改影响的特定静态值。
TIMESTAMP也受不同时区相关设置的影响。DATETIME是常量。
TIMESTAMP在内部将当前时区转换为UTC进行存储,并在检索期间转换回当前时区。DATETIME无法执行此操作。
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”
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更好。它允许用户控制所需的确切日期和时间,而不考虑服务器设置。设置时间是设置时间,不受服务器时区、用户时区或夏时制计算方式变化的影响(是的,它会变化)。
另一方面,对于表示系统时间的值,如支付事务、表修改或日志记录,始终使用时间戳。将服务器移动到另一个时区或在不同时区的服务器之间进行比较时,系统不会受到影响。
时间戳在数据库上也更轻,索引速度更快。