単一のデータベースのタイムゾーンを変更する必要がありますか?
私たちはWHM内でタイムゾーンを変更できることを知っています(hostgatorから専用サーバーを使用しています)が、サーバー上で実行されている多数のレガシーソフトウェアには多くの+6時間のコーディングがあります(つまりサーバータイムゾーンはCSTです、以前の開発者がコード内で手動で日付/時刻を変更したため、GMTの時刻が必要でした-悪い!).
私は現在、新しいソフトウェアに取り組んでおり、GMTですべてを持ちたいと思っていますが、date_default_timezone_set( 'GMT')を使用できることを知っていますが、@ CSTを挿入するため、datetime列がCURRENT_TIMESTAMPに設定されているMySQL挿入を解決しませんタイムゾーン。
いいえ、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値を保存していることです。)
現在のタイムゾーンを変更できない場合は、結果を変更できます。
日付2015-01-05 12:06:16
Select date + Interval 2 Hour 'date' From ExampleTable
日付2015-01-05 14:06:16
Current_timestampを入力する代わりにデフォルト値を変更して、タイムゾーンの時間オフセットに追加されたcurrent_timestampを挿入することができます。解決策が見つからず、独自に発明しなければならなかったときに、私はこのようにしただけです。