如何使MySQL的NOW()和CURDATE()函数使用UTC?

时间:2009-06-03 21:15:38

标签: mysql timezone utc

我想这样做,所以在MySQL查询中调用NOW()和CURDATE()会以UTC格式返回日期。如何在不经过并更改使用这些功能的所有查询的情况下实现这一目标?

7 个答案:

答案 0 :(得分:35)

终于找到了我要找的东西......

在my.cnf中,

[mysqld_safe]
timezone = UTC

我把这个选项放在[mysqld]下,并且mysql无法启动。

调用“SET time_zone ='+ 0:00';”在每个页面加载也可以工作,但我不喜欢在每个页面加载时调用该查询的想法。

答案 1 :(得分:24)

将服务器的时钟设置为UTC。不,真的。

如果你能做到,那就去做吧。

最令人头疼的问题之一是“cron”工作等,在当地时区运行,这意味着一些cron工作将每年错过一次,其余所有工作都在GMT的不同时间运行半年(I我假设你在这个夏令时的时区里。)

MySQL有时区支持,但它很疯狂并搞砸了。如果您不需要,请不要使用它。只需将服务器的时钟设置为UTC,时间就会开始工作。

我知道更改服务器时钟是任何托管系统的重大变化,您可能会有大量可能受影响的服务器和服务,但请尽量尝试。质量保证工作可能很重要,但请尝试。

答案 2 :(得分:14)

转到/etc/mysql/my.cnf文件并在[mysqld]部分下面添加以下行

  

default-time-zone ='+ 00:00'

然后重启你的mysql。现在选择curtime();显示GMT时间。

答案 3 :(得分:8)

如果更改正在运行的生产服务器上的时区或更新密钥配置设置并重新启动mysql似乎不切实际和/或过度杀伤,请尝试以下操作:

CONVERT_TZ(NOW(), 'US/Pacific', 'UTC')

US/Pacific是您的NOW()来电时区的时区{。}}。

答案 4 :(得分:4)

执行此操作的正确方法是将服务器的时区更改为UTC,就像MarkR所说的那样。

但是,也可以使用SET time_zone更改当前会话的时区。

从手册:

  

当前会话时区设置会影响区域敏感的时间值的显示和存储。这包括由NOW()或CURTIME()

等函数显示的值

答案 5 :(得分:1)

UTC_TIMESTAMP()

将当前UTC日期和时间作为值返回为“ YYYY-MM-DD hh:mm:ss”或YYYYMMDDhhmmss.uuuuuu格式,具体取决于该函数是在字符串还是数字上下文中使用。

UTC_DATE()

根据字符串或数字上下文中使用的函数,以“ YYYY-MM-DD”或YYYYMMDD格式返回当前UTC日期为值。

UTC_TIME()

将当前UTC时间作为“ hh:mm:ss”或hhmmss.uuuuuu格式的值返回,具体取决于该函数是在字符串还是在数字上下文中使用。

MySQL参考:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_utc-timestamp

答案 6 :(得分:0)

您需要使用SET TIMESTAMP语句以所需格式格式化日期时间结果。这将意味着更改所有这些查询。但是,sysdate()不会遵守这一点。