いいえ、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 が別の値に設定されていることです。)