14

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

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

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

4

3 に答える 3

49

いいえ、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' 

- また -

--default_time_zone='+00:00'オプションを mysqld_safeに追加することも可能です (あまり望ましくありません)。

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

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

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

SET time_zone='-06:00';

しかし、これはタイムゾーン変換の問題を実際に「解決」するものではなく、変換の問題を移動させるだけです。

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

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

于 2012-12-17T17:18:58.430 に答える
1

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

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

Select date + Interval 2 Hour 'date' From ExampleTable

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

于 2015-01-09T14:47:13.643 に答える