MySQL TIMESTAMP型はUTCか?ローカルタイムゾーンか?

このQ&Aのポイント
  • MySQL5のTIMESTAMP型のカラムに格納されるのはUTCであり、データの読み出し時にタイムゾーンに変換されます。
  • データはUTCで格納されますが、現在のタイムゾーンから変換され、カレントのタイムゾーンに表示されます。
  • ただし、接続ごとに異なるタイムゾーンを設定することも可能です。
回答を見る
  • ベストアンサー

MySQL TIMESTAMP型は、UTCですか?

MySQL5で、 TIMESTAMP型のカラムに格納されるのは、UTCでしょうか。 それともローカルタイムゾーンなのでしょうか? あるいは、設定による、のでしょうか? >TIMESTAMP カラムの値は、ストレージでは現在のタイム ゾーンから UTC へ、読み出しでは UTC からカレントのタイム ゾーンに変換します。 http://dev.mysql.com/doc/refman/5.1/ja/time-zone-support.html と書いてあったのを見て、TIMESTAMP型のカラムに格納されるのは、UTC(日本時間-9)だ、と思ったのですが、 実際にカラムの中を確認してみると、その時点の日本時間が格納されています。 >TIMESTAMP 値は、現在のタイムゾーンから変換されて格納され、また検索された時に現在のタイムゾーンに再変換されながら、UTCに格納されます。 http://dev.mysql.com/doc/refman/5.1/ja/timestamp-4-1.html こちらでも、「UTCに格納されます」って書かれているのですが、 これは、「現在のタイムゾーンをそれぞれの接続ごとに設定した場合」に限っての話なのでしょうか? それとも、ストレージでは、って書かれているので、 ストレージのことが絡んでいるのでしょうか?(ストレージって何のことですか)

  • re999
  • お礼率61% (476/777)
  • MySQL
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

>>内部的にUTCをPCのシステム設定を読み取って変換している >っていうのは、具体的に、どの時点で何をどうしているのでしょうか? WindowsでもLinuxでもOSの設定にタイムゾーン情報があります。mysqlサーバーがクライアントからの問い合わせがあった時点でUTCの時刻情報にタイムゾーン情報を加えてクライアントに返していると思います。 追記するとmyisamの16進ダンプですが、どうやらファイルヘッダーにファイル作成のエポック時を設けて、各レコードにはそれから経過秒数を記録しているようです。

re999
質問者

お礼

回答ありがとうございました。 大変参考になりましたー

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

> 実際にカラムの中を確認してみると、その時点の日本時間が格納されています。 これはどのように確認したのでしょうか。単純にSQLを実行しただけでは、mysqlが内部的にUTCをPCのシステム設定を読み取って変換しているか分かりません。 ストレージエンジンによるかどうかは分かりませんが、少なくともMyisamのテーブルデータのファイルを16進ダンプで見る限りではUTCでの1970年からの秒数(エポック時)を格納しているように見えるのですが。

re999
質問者

補足

回答ありがとうございます。 >これはどのように確認したのでしょうか。 SQLを実行しただけです そもそも、基本的なことが分かっていないのですが、 >内部的にUTCをPCのシステム設定を読み取って変換している っていうのは、具体的に、どの時点で何をどうしているのでしょうか?

関連するQ&A

  • MySQLのvarchar型とtext型について

    以下のURLのページを読んだのですがよく理解できません。。。 http://dev.mysql.com/doc/refman/4.1/ja/storage-requirements.html http://dev.mysql.com/doc/refman/4.1/ja/blob.html 例えば'abc'という文字列を格納するとした場合、記憶容量は varchar型では3+1バイト、text型では3+2バイトとなるようですが、 1バイト(varchar)と2バイト(text)の違い以外で、 text型の方がDBに負担がかかるとか不利になるようなことはありますか? text型では格納する文字列の長さに関係無く、65535バイトを常に確保しているとか… text型の方が動作が遅いとか… 現状、255バイト以下を想定しているのでvarchar(255)にするつもりですが、 将来的に256バイト以上となることもありえるので 最初からtext型にしていた方がいいのでしょうか? また、将来text型に変更した際にパフォーマンスが落ちる等といったことがありえるのでしょうか? 宜しくお願い致します。

  • ロールバックできないステートメントについて

    こんばんは。 既存のテーブルのカラムを削除することになりまして、 以下の手順で変更をかけました。 環境:mysql_5.5 mysql>begin; mysql>alter table test_table drop column test_column; mysql>desc test_table; mysql>rollback; mysql>desc test_table; しかし、ロールバックをかけても元に戻らなかったのですが、 http://dev.mysql.com/doc/refman/5.1/ja/cannot-roll-back.htmlhttp://dev.mysql.com/doc/refman/5.1/ja/cannot-roll-back.html の記述にあるようにバージョン5.5でもalterでのロールバックは出来ないのでしょうか。 英語のサイトを見たのですが、ただしく訳せませんでした。 http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.htmlhttp://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html 回避方法があったら、教えてください。

  • [MYSQL]TIMESTAMPをWHERE句に指定しUPDATEする方法

    以下のようにテーブルを作成し、TIMESTAMP型のカラムをキーにUPDATEをしたいと考えています。 create table test(time timestamp, amount int); insert into test values('2008-01-07 19:15:12',0); update test set amount = -1 where time = '2008-01-07 19:15:12'; ところがMYSQLではUPDATE後、TIMESTAMPのカラムが2008年から2009年に変化します。ORACLEで試しましたが、TIMESTAMP型のカラムは変わりませんでした。 +---------------------+--------+ | time | amount | +---------------------+--------+ | 2009-06-30 10:04:53 | -1 | +---------------------+--------+ MYSQLの独自の仕様があるのでしょうか? MYSQL 5.1.35(mysql-essential-5.1.35-win32.msi) Windows 2003 Server Standard Edition R2 MYISAM

    • ベストアンサー
    • MySQL
  • intの数字をtimestampに変換したい

    php5,mysql5.1の環境です。 mysqlのフィールドにint(11)でunix timestampを挿入しています。 その11桁の数字の羅列をunixのタイムスタンプ形式に変更したいのですがどのようにすればよいのでしょうか。 うまく説明できないのですが、その11桁の数字はタイムスタンプとしてphp側で処理できないのでしょうか。 mysqlの種別カラムにおいて、int(11)とtimestampは同一のデータとして処理できないのでしょうか。

    • ベストアンサー
    • PHP
  • MySQL 予約語名で、カラム作成できるでしょうか

    ■質問 ・MySQL予約語名でもカラムを作成できるのでしょうか? ■背景 ・文法エラーSQL文の原因を調べると、どうやら予約語を利用したためだと分かりました ・予約語と知っていたら初めから利用しなかったのですが、その名前で普通にカラムを作成できたので、てっきり使えるものだと思い込んでしまいました ■知りたいこと ・予約語を回避するには、ここをチェックするしかないのでしょうか? ▽MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い   http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html ・予約語による影響を受けるのはどんな時?(CREATEは関係ない?) 予約語によって異なる?

    • ベストアンサー
    • MySQL
  • mysqlのconfについて

    バイナリログの削除についていろいろな サイトを回って確認していたのですが expire_logs_days と expire-logs-days の両方(ハイフンとアンダースコア)が各サイトでバラバラでした。 公式のmysqlのページでは http://dev.mysql.com/doc/refman/5.1-olh/ja/purge-binary-logs.html アンダースコアのようです。 どちらも試してみたのですが どちらも有効?のようです。 何か記述のルールみたいのがあるのでしょうか。 一応、公式に合わせてアンダースコアで設定しようと思いますが このままだとしっくりこないと思い質問させて頂きました。 mysqlに詳しい方、回答よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MysqlでのLOCK処理

    Mysqlのwebリファレンスの http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.htmlでは --->個々の UPDATE ステートメントでは、いずれも処理が原子的に行われるため、通常、テーブルをロックする必要はありません。現在実行中の SQL ステートメントが、他のスレッドによって妨害されることはまったくありません。しかし、次に示すように、テーブルをロックする必要が生じる場合もいくつかあります。 トランザクションをサポートしていないストレージエンジンを MySQL で使用している場合、SELECT と UPDATE の間に他のスレッドに割り込まれないようにするには、LOCK TABLES を使用する必要がある。次の例では、安全に処理を実行するために LOCK TABLES を発行する必要がある。<--- と説明がありますが、 (1)トランザクションをサポートしていないストレージエンジンでINSERT INTO,DELETE処理をするにはLOCKが必要になってくるのでしょうか? よろしくご教授おねがいします

  • MySQL Connector C++について

    ttp://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html MySQL Connector/C++についてなんですが、 Connector/Cでいう mysql_options(&mysql, MYSQL_SET_CHARACTER_NAME, "sjis") に相当するものは無いでしょうか? sjisで文字を扱いたいんですが…

    • ベストアンサー
    • MySQL
  • MySQLリファレンスマニュアル(公式)の見方

    MySQLの公式サイトのリファレンスマニュアルに、そもそもの見方が説明されているページは用意されていますか? 探したのですが、見当たらなかったので質問させていただきました。 特に斜体の部分が説明がなされているページがあれば大変助かります。 斜体の部分とは、例えば、以下のページのtable_references等です。 http://dev.mysql.com/doc/refman/5.1/ja/update.html 英語の意味からざっくり予想することはできるのですが、直訳してもよく分からないものもあるので。 ご教示のほど、なにとぞよろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • MySQLのタイムゾーンの設定

    ・OS(CentOS7)のタイムゾーン:United States である場合、my.cnfにて ・MySQLシステムのタイムゾーン(SYSTEM) ・セッションのタイムゾーン(SYSTEM) という設定を行いました。 show variables like '%time_zone%'; を実行すると以下のようになっておりこの状態で select now(); を行ったらUTCタイムが表示されました。 United Statesの時刻が表示されると思ったのですが なぜUTC時刻が表示されたのでしょうか。 +--------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | system_time_zone | SYSTEM | | time_zone | SYSTEM |

    • ベストアンサー
    • MySQL