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

我想让它在MySQL查询中调用NOW()和CURDATE()以UTC来返回date。 我如何做到这一点,而无需通过并更改所有使用这些函数的查询?

终于find了我正在寻找的东西…

在my.cnf中,

[mysqld_safe] timezone = UTC 

我在[mysqld]下面加了这个选项,而mysql无法启动。

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

将服务器的时钟设置为UTC。 不完全是。

如果你能做到的话,就去做吧。

其中最令人头疼的是在当地时区运行的“cron”工作等,这意味着一些cron工作将会每年错过一次,其余所有时间在格林尼治标准时间(GMT)运行半年(我假设你在一个夏令时在这里的时区)。

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

我知道,更改服务器时钟对于任何托pipe系统都是一个重大改变,并且您可能会有大量可能受到影响的服务器和服务,但是请尝试执行此操作。 质量保证工作可能是重要的,但尝试。

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

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

然后重新启动你的MySQL。 现在selectcurtime(); 显示GMT时间。

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

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

如果US/Pacific是时区,则您的NOW()电话正在返回时间。

正确的做法是将服务器的时区更改为UTC,就像MarkR所说的那样。

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

从手册:

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

您将需要使用SET TIMESTAMP语句以所需格式格式化date时间结果。 这将意味着改变所有这些查询。 sysdate()不会服从这个。