Perl で MySQL を利用しています。


先ほど、DBを利用して組んでいるのですが、DATETIMEというのがありますよね。

僕の認識では、データを入れた瞬間にその時間帯が自動的に入力される、という認識なのですが、、、この認識で間違いないでしょうか?

また、データの一部を、update などを用いて修正をした場合は、DATETIME はまた作動するのでしょうか?

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:
  • 終了:2007/11/05 17:55:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:moke3rd No.1

回答回数34ベストアンサー獲得回数3

ポイント20pt

望んでいる動作をするのは TIMESTAMP型です。

DATETIME型は日付と時間を格納する単なるデータ型です。

http://dev.mysql.com/doc/refman/4.1/ja/datetime.html

id:zachouR

ありがとうございます。すいません、勘違いをしておりました。

2007/11/02 11:22:25
id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント20pt

DATETIMEというのは単に「日付と時間をもつ型」なだけですので、insertした瞬間の時間が自動的に入力されるというのは間違いです。

insert時の時間をセットしたければ NOW() や CURRENT_TIMESTAMP で現在時刻を取得できますし、固定値を入れたければ '2007-10-28 14:17:20' の様な値を入れてやれば良いです。updateでも同じです。

ちなみにinsert時にデフォルト値として現在時刻が入るのは TIMESTAMP 型ではないでしょうか?DATETIMEはデフォルトはNULLが入ると思います。

http://dev.mysql.com/doc/refman/5.1/ja/datetime.html

id:zachouR

ありがとうございます。上記の方でも申し上げましたが、勘違いでした。すいません。

2007/11/02 11:22:44
id:iwaim No.3

回答回数215ベストアンサー獲得回数19

ポイント20pt

その認識は間違っています。そういう用途ではTIMESTAMP型を使います。

また、MAXDBモードか否かで挙動が変わります。詳しくは次のドキュメントをどうぞ。

http://dev.mysql.com/doc/refman/4.1/ja/datetime.html

id:zachouR

すいません。わざわざ、ありがとうございます。こちらの不手際でした。

2007/11/02 11:23:05
id:tail_furry No.4

回答回数74ベストアンサー獲得回数7

ポイント20pt

DATETIMEというのは、あくまで「型」です。日付と時刻を入れることができる型、ということになります。

http://dev.mysql.com/doc/refman/4.1/ja/datetime.html

僕の認識では、データを入れた瞬間にその時間帯が自動的に入力される、という認識なのですが、、、この認識で間違いないでしょうか?

この認識は間違っています。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_16.htm

http://www.limy.org/program/db/mysql/mysql_operators.html

データを入れた瞬間にその時間帯を自動的に入力するには、SQLで明示的に、次のような感じで、その時の時間を自動的に入力するよう指示する必要があります。

INSERT INTO foo VALUES(NOW())

または

INSERT INTO foo VALUES(SYSDATE())

Now()またはSYSDATE()、で今現在の日付と時刻を得ることができます。

また、データの一部を、update などを用いて修正をした場合は、DATETIME はまた作動するのでしょうか?

この認識も間違っています。

http://dev.mysql.com/doc/refman/4.1/ja/update.html

updateで修正をする場合に、DATETIMEの列をupdate文に含めなければ、DATETIMEの列の中の値はそのままです。

id:zachouR

すいません、間違っておりました。

勘違いでした。

2007/11/02 11:23:21
id:chuken_kenkou No.5

回答回数722ベストアンサー獲得回数54

ポイント20pt

MySQLのDATETIME型は、ユーザ任意の日時を入れるデータ型です。

INSERTやUPDATEを実行時の日時を入れることもできれば、まったく異なる日時を入れることもできます。

INSERTやUPDATE実行時の日時を入れるには、CURRENT_TIMESTAMP関数を使えます。これ以外に、日時を文字定数で、'2007-10-29 18:00:00'のように指定することも可能です。

一方、MySQLのTIMESTAMP型は、他のRDBMSとは異なり、利用者側の値の指定に関係なく、MySQL側が自動的に日時を格納するので、注意が必要です。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.2.2.2 DATETIME、DATE、TIMESTAMP 型

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.4 日付と時刻関数

id:zachouR

すいません、間違いをしておりました。

わざわざありがとうございました。

2007/11/02 11:23:43
  • id:b-wind
    余談ですが、datetime と timestamp はその挙動のほかに表現できる範囲が違うという特徴があるようです。
    timestamp 型だと、32bit なのでいわゆる 2038 年問題が発生します。
  • id:zachouR
    今回の質問は勘違いをしておりました。
    すいませんでした。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません