2009-06-03 24 views
38

MySQLクエリでNOW()とCURDATE()を呼び出すと、UTCで日付が返されます。どのようにすれば、これらの機能を使用するすべてのクエリを通過せずに変更する必要はありませんか?MySQLのNOW()関数とCURDATE()関数をUTCで使用する方法を教えてください。

+9

あなたが求めるものではありませんが、ときにはUTC_TIMESTAMP()を使用するほうが良い –

+0

これはあなたを助けるかもしれません:http://stackoverflow.com/questions/19023978/should-mysql-have-its-timezone-set -to-utc –

+0

これについて:http://w3resource.com/mysql/date -and-time-functions/mysql-utc_timestamp-function.php – zx1986

答えて

33

最後に私がいた

[mysqld_safe] 
timezone = UTC 

、私はmy.cnfのでは...

探していたものを見つけを含みこのオプションを[mysqld]の下に置くと、mysqlは起動に失敗しました。

"SET time_zone = '+ 0:00';"すべてのページのロードでも動作しますが、私はすべてのページの負荷にそのクエリを呼び出すのアイデアを好きではありません。

+0

したがって、timezone = UTCは[mysqld_safe]に入れる必要があり、[mysqld]に入れる必要はありません。 – Jimmy

+2

[mysqld]に入れると起動できません。しかし、私にとっては、それを[mysqld_safe]に入れても、NOW()を使うときは現地時間として日付が入れられます。 – sigurdga

+0

この設定はmysqlを私にとってはUTCに変更しません - mysql 5.5.47-0ubuntu0.14.04.1。 arulrajの答えは私のために働いた。 – Julian

23

サーバーのクロックをUTCに設定します。いいえ。

できる場合は、実行してください。

ローカルのタイムゾーンで実行されている「cron」ジョブなどがあります。これは、一部のcronジョブが1年に1回見逃され、残りのすべてが半年ごとに異なる時間GMTで実行されることを意味します私はあなたがここで夏時間を持っているタイムゾーンにいると仮定しています)。

MySQLにはタイムゾーンがサポートされていますが、それは狂っているだけです。あなたがする必要がない場合は、使用しないでください。サーバーの時計をUTCに設定するだけで、時間がどのように働くかが始まります。

は、私は、サーバーのクロックを変更するとすべての管理対象システムのための主要な変更であることを知って、あなたが影響を受ける可能性があるサーバーとサービスの数が多い、しかし、とにかくそれを行うにしてみてくださいことがあります。 QAの作業は重要なのかもしれませんが、試してみてください。

+0

これまでにこれまで読んだことがあり、開発中に何をしているのだろうか?開発用PCの時間をUTCに設定していますか? –

+5

VMで開発し、VMのクロックをUTCに設定します。デスクトップPC上で開発することはありません。それは、企業のIT部門が管理するWindows PCで、グループポリシーを使用して任意の構成を変更した場合など、さまざまな方法で苦労します。 – MarkR

+0

これは間違いなくそれを行う方法です。 VMのタイムゾーンを設定したら、必ずMySQLサーバーを再起動してください。 – DanO

0

datetime結果を目的の形式でフォーマットするには、SET TIMESTAMP文を使用する必要があります。これは、これらのクエリをすべて変更することを意味します。 sysdate()はこれに従わないでしょう。

4

これを行う適切な方法は、MarkRが述べたようにサーバーのタイムゾーンをUTCに変更することです。

しかし、それはあなたの現在のセッションのタイムゾーンを変更するSET time_zoneを使用することも可能です。

マニュアルから:

現在のセッションのタイムゾーンの設定は、ゾーンと小文字が区別される時間値の表示及び記憶に影響を与えます。これは、NOWなどの機能により、表示される値()またはCURTIME()

12

後藤/etc/mysql/my.cnfファイルと[mysqld]セクション

デフォルトの時間帯下=の行の下にこれを追加 '00の:00'

は、その後、再起動しますあなたのmysql。 curtime()を選択します。 GMT時間を示します。

+0

on mac osx、homebrew mysql 5.6これは動作しません。 – Jaap

7

あなたの実行中の運用サーバー上でタイムゾーンを変更したり、キーの構成設定を更新してMySQLを再起動すると、非現実的と思われる、および/またはやり過ぎた場合は、この試してください:US/PacificはあなたのNOW()呼び出しが戻っている時間帯である

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

+0

これには、[タイムゾーンテーブルを設定する](https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html)が必要です。 – Dezza

関連する問題