How do I make MySQL's NOW() and CURDATE() functions use UTC?
我想这样做,以便在MySQL查询中对NOW()和CURDATE()的调用以UTC返回日期。 如何在不检查和更改所有使用这些功能的查询的情况下实现这一目标?
终于找到了我想要的...
在my.cnf中,
1 2 | [mysqld_safe] timezone = UTC |
我将此选项放在[mysqld]下,而mysql无法启动。
呼叫" SET time_zone ='+ 0:00';"在每个页面加载上也可以工作,但是我不喜欢在每个页面加载上调用该查询的想法。
将服务器的时钟设置为UTC。不完全是。
如果可以做到,那就去做。
最大的麻烦之一是在当地时区运行的" cron"作业等,这意味着某些cron作业每年会丢失一次,而所有其他cron作业将在GMT的不同时间运行半年(我假设您所在的时区在这里有夏令时)。
MySQL具有时区支持,但是它太疯狂了而且搞砸了。如果不需要,请不要使用它。只需将服务器的时钟设置为UTC,时间就会开始工作。
我知道更改服务器时钟是任何受管系统的一项重大更改,并且您可能有大量可能受到影响的服务器和服务,但是请无论如何都尝试这样做。质量检查工作可能很重要,但请尝试。
转到/etc/mysql/my.cnf文件,并将其添加到[mysqld]部分下面的行下面
default-time-zone = '+00:00'
然后重启你的mysql。现在选择curtime();显示格林尼治标准时间。
如果更改正在运行的生产服务器上的时区或更新关键配置设置并重新启动mysql似乎不现实和/或过度使用,请尝试以下操作:
1 |
其中
正如MarkR所说的那样,执行此操作的正确方法是将服务器的时区更改为UTC。
但是,也可以使用SET time_zone更改当前会话的时区。
从手册中:
The current session time zone setting affects display and storage of time values that are zone-sensitive. This includes the values displayed by functions such as NOW() or CURTIME()
返回当前UTC日期和时间的值,格式为" YYYY-MM-DD hh:mm:ss"或YYYYMMDDhhmmss.uuuuuu格式,具体取决于该函数是在字符串还是在数字上下文中使用。
1 |
以" YYYY-MM-DD"或YYYYMMDD格式返回当前UTC日期作为值,具体取决于该函数是在字符串上下文中还是在数字上下文中使用。
1 |
以'hh:mm:ss'或hhmmss.uuuuuu格式返回当前UTC时间作为值,具体取决于该函数是在字符串还是在数字上下文中使用。
MySQL参考:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_utc-timestamp
您将需要使用SET TIMESTAMP语句将日期时间结果格式化为所需的格式。这将意味着更改所有这些查询。 sysdate()不会遵守。