2012-12-17 16 views
7

これは可能なのですが、単一のデータベースのタイムゾーンを変更する必要がありますか?MySQLデータベースのタイムゾーンをGMTに設定

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

私は現在GMTで作業していますが、date_default_timezone_set( 'GMT')を使用することはできますが、datetimeカラムがCURRENT_TIMESTAMPに設定されているMySQL挿入を解決しません@ CSTタイムゾーンが挿入されます。

答えて

33

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

あなたは、サーバーとクライアントのtime_zone設定を取得することができます

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

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

しかし、既存のクライアント接続に関する意味と、インスタンスにすでに格納されているDATETIMEおよびTIMESTAMP値の解釈方法を熟知していること。

、MySQLインスタンスの起動時に設定されたサーバーのTIME_ZONEを持って/etc/my.cnfファイル(またはどこにあなたのMySQLインスタンスの初期化パラメータが読み出され)を変更し、[mysqld]セクションの下には:

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

- または - MySQLサーバ上のタイムゾーンの設定を変更すると、値のSTOを変更しない: -

NOTEをmysqld_safeをする--default_time_zone='+00:00'オプションを追加既存のDATETIME列またはTIMESTAMP列には赤色になりますが、格納された値が解釈されるコンテキストを効果的に変更するため、すべての値がシフトされたように見えます。 (08:00は8AM CSTを意味すると解釈され、サーバーのtime_zoneがCSTからGMTに変更された場合、同じ'08:00 'はGMTが午前8AMになり、実質的に2AM CSTになります)

DATETIMEカラムはタイムゾーンを持っていないながら

また、TIMESTAMPカラムは常にUTCに格納されていることを心に留めておく http://dev.mysql.com/doc/refman/5.5/en/datetime.html

各クライアントのセッションを自分のセッションのためのタイムゾーンの設定を変更することができます。

SET time_zone='-06:00'; 

しかしthのどれも実際にタイムゾーン変換の問題を "解決"しているだけで、変換の問題が回避されます。

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

(あなたが説明しているセットアップについて奇妙なのは、MySQLサーバのtime_zoneがGMTに設定されているようにDATETIME値を格納しているのにMySQLサーバのtime_zoneが何かに設定されているということです。)

+0

わかりやすく簡潔な回答をいただきありがとうございます。でも、それは不可能です。別のサーバーだと思います! – buzzmonkey

+4

SET timezone = ' - 06:00'; SET time_zone = ' - 06:00'にする必要があります。 –

2

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

日2015年1月5日12時06分16秒

"ExampleTableから選択した日付+間隔2時間 '日付'"

日2015年1月5日午後2時06分16秒

関連する問題