いいえ、MySQLインスタンス内の単一のデータベースのタイムゾーンを変更することはできません。
サーバーとクライアントのtime_zone
を取得できます 次のようなクエリを使用した設定:
SELECT @@global.time_zone, @@session.time_zone;
セッションのクライアントのタイムゾーンを変更したり、MySQLインスタンス全体のタイムゾーンを変更したりすることもできます。
ただし、この変更が既存のクライアント接続に与える影響と、DATETIME
の方法については、十分に注意する必要があります。 およびTIMESTAMP
インスタンスにすでに保存されている値が解釈されます。
MySQLインスタンスの起動時にサーバーのtime_zoneを設定するには、/etc/my.cnf
を変更します。 [mysqld]
の下のファイル(またはmysqlインスタンス初期化パラメーターが読み取られる場所) セクション:
[mysqld]
default-time-zone='+00:00'
-または-
--default_time_zone='+00:00'
を追加することも可能です(あまり望ましくありません)。 mysqld_safeのオプション
注: MySQLサーバーのタイムゾーン設定を変更しても、既存のDATETIME列またはTIMESTAMP列に格納されている値は変更されませんが、格納されている値が解釈されるコンテキストが効果的に変更されるため、すべての値がシフトされているように見えます。 (08:00は午前8時のCSTを意味し、サーバーのtime_zoneがCSTからGMTに変更された場合、同じ「08:00」は午前8時のGMTと見なされ、実質的に午前2時のCSTになります。
>
また、TIMESTAMP列は常にUTCで保存されますが、DATETIME列にはタイムゾーンがないことに注意してください。
各クライアントセッションは、独自のセッションのタイムゾーン設定を変更できます。
SET time_zone='-06:00';
ただし、これはいずれもタイムゾーン変換の問題を実際に「解決」するものではなく、変換の問題を回避するだけです。
タイムゾーン変換を処理するアプリケーション層には、本質的に「悪い」ものは何もありません。時々、それは処理するのに最適な場所です。正しく一貫して行う必要があります。
(あなたが説明する設定の奇妙な点は、MySQLサーバーのtime_zoneがGMTに設定されているかのように、アプリがDATETIME値を保存しているのに、MySQLサーバーのtime_zoneが別の値に設定されていることです。)