【问题标题】:2 hour difference in mysql column in datetime format日期时间格式的mysql列中的2小时差异
【发布时间】:2013-06-28 04:46:34
【问题描述】:

我有一个每小时运行一次的 cronjob。更新数据集时,此 cronjob 应写入数据库。我在 php 中的 SQL 查询看起来像这样

INSERT INTO allstats (site_id, adformat_id, imps, clicks, conv, net_pub_comp, created_at, updated_at) VALUES (?,?,?,?,?,?,"'.date("Y-m-d H:i:s").'", "'.date("Y-m-d H:i:s").'")

我打印出日期(“Y-m-d H:i:s”),我得到 2013-06-28 04:05:17 这是完全正确的日期和时间。之后我在 mysql 中选择 now() 并且时间也是一样的。服务器上的时区设置为欧洲/柏林。该时区也在 php 和 mysql 中设置。在任何地方我都能找到合适的时间。

但是为什么插入日期时间列的值比实际时间早 2 小时?我希望有人有一个想法。谢谢你的帮助。

【问题讨论】:

  • cronjob 在自己的“环境”中运行。您可以在 crontab 文件的顶部设置环境变量(如TZ),使其使用您想要的时区。
  • 您好,感谢您的提示。但是如果我通过 php 在 ssh 中运行脚本,我也会遇到问题。所以像 TZ 这样的 var 不会有帮助吗?
  • 保存到数据库中的时间应设计为 UTC,然后呈现为本地时间以供显示。

标签: php mysql date datetime


【解决方案1】:

如果您插入的日期时间是脚本执行的日期时间,为什么不在插入语句中使用NOW()

INSERT INTO allstats (site_id, adformat_id, imps, clicks, conv, net_pub_comp, created_at, updated_at) 
VALUES (?,?,?,?,?,?,NOW(),NOW())

绑定和传递的参数更少。

【讨论】:

  • 嘿,谢谢你的提示,但现在时间也晚了 2 小时:(
  • 在mysql中执行并发布`show variables like '%time_zone%'的结果;
  • 嘿抱歉长时间回复:这是我的输出:system_time_zone CEST time_zone SYSTEM
  • 在您的脚本中尝试在插入之前执行SET time_zone = '+2:00'; 以更改该特定连接的时区。
【解决方案2】:

MySQL 日期/时间应存储在UTC 时区。您的应用程序应计算差异并将该日期/时间转换为适当的时区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多