mysql - 我应该在 MySQL 中将我的时间戳保存为 UTC 吗?

标签 mysql

假设我需要获取订单,并且需要保存用户下订单的时间戳。此外,我需要一种方法来根据用户请求密码重置代码的时间来跟踪 token 何时设置为过期。我的服务器位于德克萨斯州,我如何为遍布美国的用户提供服务?我最不想做的就是问他们在哪个时区,所以我不确定如何处理 UTC 显示时间,这会让普通人感到困惑。

最佳答案

首先,您应该将显示存储 隔离。仅仅因为您以特定方式存储值并不意味着您必须以这种方式显示它。

其次,想想您实际捕获的是什么:它是一个时间戳。 “现在”的全局理念。时区在这里无关紧要 - 位于不同时区的两个通情达理的人会就谁先下订单达成一致,而不管他们所在的时区如何。

因此感觉以 UTC 格式存储时间戳是完全合理的。事实上,时间戳几乎总是最好存储在 UTC 中。只有当您询问用户对日期/时间的想法时,本地时间有时才有意义。

至于如何显示用户本地时间的值 - 这很棘手:

  • 你可以根据他们的送货地址等来猜测
  • 你可以根据他们的 IP 地址来猜(可能会有一些有趣的问题)
  • 您可以猜一次并将其存储在首选项中,因此他们可以在必要时修复它
  • 您可以使用 Javascript 实现,提供 UTC 值,然后在客户端将其转换为本地时间

(当然,在猜测时区时,您始终可以在 Javascript 中使用 UTC 到本地的转换来帮助使猜测准确。)

关于mysql - 我应该在 MySQL 中将我的时间戳保存为 UTC 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180810/

相关文章:

MySQL:选择按字符数排序的行

mysql - 如何在mysql的一个查询中连接两列

mysql - sql:从cp1251转换为utf8

php - MySQL - 查询创建的记录 "today",但日期为 UTC

mysql 查询在我的左连接上未收到任何数据

mysql - SQL:在不覆盖行的情况下加入后的 GROUP BY?

python - 在docker容器中启动mysql后插入数据

php - Where 子句和 Order By 未按预期在 WordPress 中返回

java - Sphinx查询从mysql转换

mysql - 在 mysql 中使用多行触发器将两列合并为一列