web-dev-qa-db-ja.com

MySQLデータベースのタイムゾーンをGMTに設定します

単一のデータベースのタイムゾーンを変更する必要がありますか?

私たちはWHM内でタイムゾーンを変更できることを知っています(hostgatorから専用サーバーを使用しています)が、サーバー上で実行されている多数のレガシーソフトウェアには多くの+6時間のコーディングがあります(つまりサーバータイムゾーンはCSTです、以前の開発者がコード内で手動で日付/時刻を変更したため、GMTの時刻が必要でした-悪い!).

私は現在、新しいソフトウェアに取り組んでおり、GMTですべてを持ちたいと思っていますが、date_default_timezone_set( 'GMT')を使用できることを知っていますが、@ CSTを挿入するため、datetime列がCURRENT_TIMESTAMPに設定されているMySQL挿入を解決しませんタイムゾーン。

13
buzzmonkey

いいえ、MySQLインスタンス内の単一のデータベースのタイムゾーンを変更することはできません。

サーバーとクライアントのtime_zone設定を取得できます。

SELECT @@global.time_zone, @@session.time_zone;

クライアントのタイムゾーン、またはMySQLインスタンス全体のタイムゾーンを変更することもできます。

ただし、既存のクライアント接続に与える影響、およびインスタンスに既に格納されているDATETIME値とTIMESTAMP値がどのように解釈されるかについては十分に注意してください。

MySQLインスタンスの起動時にサーバーのtime_zoneを設定するには、[mysqld]セクションの下の/etc/my.cnfファイル(またはmysqlインスタンスの初期化パラメーターの読み取り元)を変更します。

[mysqld]
default-time-zone='+00:00' 

-または-

--default_time_zone='+00:00'オプションをmysqld_safeに追加します

注意: MySQLサーバーのタイムゾーン設定を変更しても、既存のDATETIMEまたはTIMESTAMPカラムに格納されている値は変更されませんが、格納された値が解釈されるコンテキストを効果的に変更するため、すべての値がシフトされているように見えます。 (サーバーのtime_zoneがCSTからGMTに変更され、午前8時がCSTからGMTに変更された場合、同じ「08:00」は午前8時GMT(事実上午前2時CST)になります。

また、TIMESTAMP列には常にUTCが格納されますが、DATETIME列にはタイムゾーンがありません。 http://dev.mysql.com/doc/refman/5.5/en/datetime.html

各クライアントセッションは、独自のセッションのタイムゾーン設定を変更できます。

SET time_zone='-06:00';

しかし、これはタイムゾーン変換の問題を本当に「解決」するものではなく、単に変換の問題を回避するだけです。

タイムゾーン変換を処理するアプリケーション層には、本質的に「悪い」ものは何もありません。時々、それは処理するのに最適な場所です。正しく、一貫して行われなければなりません。

(説明するセットアップの奇妙な点は、MySQLサーバーのtime_zoneがGMTに設定されているが、MySQLサーバーのtime_zoneが別の値に設定されているかのようにアプリがDATETIME値を保存していることです。)

44
spencer7593

現在のタイムゾーンを変更できない場合は、結果を変更できます。

日付2015-01-05 12:06:16

Select date + Interval 2 Hour 'date' From ExampleTable

日付2015-01-05 14:06:16

2
Can Bezmen

Current_timestampを入力する代わりにデフォルト値を変更して、タイムゾーンの時間オフセットに追加されたcurrent_timestampを挿入することができます。解決策が見つからず、独自に発明しなければならなかったときに、私はこのようにしただけです。

0
cHAuHaN