web-dev-qa-db-ja.com

MySQLのNOW()およびCURDATE()関数でUTCを使用するにはどうすればよいですか?

MySQLクエリでNOW()およびCURDATE()を呼び出すと、UTCで日付が返されるようにします。これらの関数を使用するすべてのクエリを変更せずにこれを実現するにはどうすればよいですか?

42
Chad Johnson

最後に私が探していたものを見つけました...

My.cnfで、

[mysqld_safe]
timezone = UTC

私はこのオプションを[mysqld]の下に置いていましたが、mysqlを開始できませんでした。

「SET time_zone = '+ 0:00';」の呼び出しすべてのページの読み込みでも機能しますが、すべてのページの読み込みでそのクエリを呼び出すという考えは好きではありません。

35
Chad Johnson

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

できるなら、それをしてください。

最大の頭痛の種の1つは、ローカルタイムゾーンで実行される「cron」ジョブなどです。これは、一部のcronジョブが1年に1回見逃されることを意味します。あなたはここで夏時間のあるタイムゾーンにいます)。

MySQLにはタイムゾーンのサポートがありますが、それはおかしくて混乱しています。必要がない場合は使用しないでください。サーバーの時計をUTCに設定するだけで、時刻が正常に機能し始めます。

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

24
MarkR

/etc/mysql/my.cnfファイルに移動し、[mysqld]セクションの下に次の行を追加します

デフォルト時間帯= '+00:00'

次に、mysqlを再起動します。今curtime()を選択します; GMT時間を示します。

14
arulraj.net

稼働中の本番サーバーでタイムゾーンを変更するか、主要な構成設定を更新してmysqlを再起動するのが非現実的または過剰な場合は、これを試してください:

_CONVERT_TZ(NOW(), 'US/Pacific', 'UTC')
_

_US/Pacific_は、NOW()呼び出しが時間を返しているタイムゾーンです。

8
Dan

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

ただし、 SET time_zone を使用して、現在のセッションのタイムゾーンを変更することもできます。

マニュアルから:

現在のセッションのタイムゾーン設定は、ゾーンに依存する時間値の表示と保存に影響します。これには、NOW()やCURTIME()などの関数によって表示される値が含まれます

4
andri
UTC_TIMESTAMP()

現在のUTC日時を、関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、「YYYY-MM-DD hh:mm:ss」またはYYYYMMDDhhmmss.uuuuuu形式の値として返します。

UTC_DATE()

関数が文字列コンテキストで使用されるか数値コンテキストで使用されるかに応じて、現在のUTC日付を 'YYYY-MM-DD'またはYYYYMMDD形式の値として返します。

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

3
wasserholz

SET TIMESTAMPステートメントを使用して、日時の結果を目的の形式にフォーマットする必要があります。これは、これらすべてのクエリを変更することを意味します。ただし、sysdate()はこれに従いません。

0
websch01ar