&tag(MySQL/タイムゾーン); *目次 [#dd18798b] #contents *参考情報 [#b13a3102] -[[MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.10.8 MySQL サーバのタイム ゾーン サポート:http://dev.mysql.com/doc/refman/5.1/ja/time-zone-support.html]] -[[実践 ハイパフォーマンスMySQL(第2版)を斜め読みして前半の重要なポイントだけをまとめてみた - Yuta.Kikuchiの日記:http://d.hatena.ne.jp/yutakikuchi/20120122/1327214127]] -[[Rails3系のtimezoneの扱いに関するメモ - Qiita [キータ]:http://qiita.com/semind/items/68341489a9c5149b815d]] -[[Rails3 + ActiveRecord で正しくtimezoneを設定する - Future Journal 〜未来志向で行こう〜:http://twodollarz.hatenablog.jp/entry/20120703]] -[[Rails と時刻 - @kyanny's blog:http://blog.kyanny.me/entry/2012/08/16/042204]] -[[Rails3/タイムゾーン]] *タイムゾーンの確認方法 [#g1f187ef] -以下のようにして表示できる。SYSTEMはSYSTEMのタイムゾーン #pre{{ mysql> SELECT @@global.time_zone, @@session.time_zone; +--------------------+---------------------+ | @@global.time_zone | @@session.time_zone | +--------------------+---------------------+ | SYSTEM | SYSTEM | +--------------------+---------------------+ }} -SYSTEMタイムゾーンが知りたい場合(タイムゾーンを変更した場合、一回クライアントを立ち上げ直さないとリフレッシュされない)。 #pre{{ mysql > show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | JST | | time_zone | SYSTEM | +------------------+--------+ }} *タイムゾーンの変更方法 [#p4542dd5] -[[MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.10.8 MySQL サーバのタイム ゾーン サポート:http://dev.mysql.com/doc/refman/5.1/ja/time-zone-support.html]] -グローバル設定を変更するには管理者権限が必要 mysql> SET GLOBAL time_zone = timezone; mysql> SET GLOBAL time_zone = SYSTEM mysql> SET GLOBAL time_zone = '+0:00' -接続毎の設定を変更する場合 mysql> SET time_zone = timezone; *タイムゾーンはどこに影響するのか [#scce25b3] -INSERTする時刻文字列のタイムゾーンは影響なし。つまり'YYYY-MM-DD HH:MM:SS'形式しか許されない。タイムゾーン部分があったとしても無視される(?) -テーブルの列がdatetime型である場合。datetime型は文字列として保存されるのでタイムゾーンの影響なし。datatime型の列にJSTで「2013-08-30 12:23:34」を保存し、タイムゾーンを+0:00に変更して表示しても「2013-08-30 12:23:34」のまま表示される。 -テーブルの列がtimestamp型である場合。timestamp型の列はUTCに変換されて格納されるのでタイムゾーンの影響あり。JSTで「2013-8-30 12:23:34」を保存すると、UTCの「2013-08-30 03:23:34」が保存される。タイムゾーンを+0:00に変更して、この値を表示すると「2013-08-30 03:23:34」が表示される。 -NOW()などの表示にもタイムゾーンを考慮した時刻が表示される。タイムゾーンが+0:00の場合、日本時間 2013-08-30 16:20:49にNOW()を実行すると、 「2013-08-30 07:20:49」と表示される。