重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは。お世話になっております。
現在、右も左も分からないまま、書籍を参考に、DB(MySQL)を触り始めて2ヶ月足らずの初心者ですが、とあるサイトに、PostgreSQLの設定として以下のようなものが紹介されておりました。
sid、uidなどは分かるのですが、最後のフィールド(rdate)はどのような意味を持つものなのでしょうか?
初めて見る内容のものなので、DBの違いによるものなのか?などなど、DBの設定の意味が分からず躓いております。

お忙しい中恐縮ですが、ご教授頂ければ幸いです。

CREATE TABLE session (
sid varchar(32) primary key,
uid varchar(16) not null,
password varchar(16),
rawdata varchar(512),
rdate timestamp default 'now'
);

A 回答 (2件)

>rdate timestamp default 'now'



この文の意味としては、rdateというtimustamp型(日時を表す)の列に、insert時に値を設定しなかった場合、システムから現在日時を受け取って格納するという意味です。

>MySQLの場合、どのような属性が適切なのかをお教えいただければ

データ型のtimestampは、PostgreSQL、MySQLの双方に存在し、日時を表す点では等価と考えて問題ないでしょう。
→実際にはPostgreSQLの方が、timestamp型でもいくつかの表現形式を持っているという違いがあります。

default 'now'というのは、PostgreSQLの独特の記述で、一般的な表記方法としてdefault current_timestampという表記がPostgreSQLでも等価の意味で行えます。この表記方法は、MySQLでも同じです。
→PostgreSQL 8.0.0では、default 'now'と記述すると、最初のinsert時に受け取った現在日時がその後も繰り返し受け渡しされ、これはバグだと思われます。current_timestamp指定では、insert毎に最新の日時が仕様通り返されます。

PostgreSQLでも一般的なSQLの書き方にすれば、今回のケースでは、MySQLでもそのままの文で表定義を行えます。

CREATE TABLE session (
sid varchar(32) primary key,
uid varchar(16) not null,
password varchar(16),
rawdata varchar(512),
rdate timestamp default current_timestamp
);
    • good
    • 0
この回答へのお礼

chukenkenkou様

こんばんは。早速のお返事を有難う御座います。
分かりやすい説明で、とても参考になりました。
お忙しい中、有難う御座いました。

お礼日時:2006/07/03 21:28

この表定義は、どこからの引用ですか?



ユーザの表定義なのですから、各列がどういう意味を持つのかは、引用元で調べるしかありません。

運良く(?)この表定義の引用元と思われるサイトを、私の方でも発見できました。

PHPでのコーディングのソース上のコメントでは、以下のように記されていますね。

処理内容は検証していないので、ご自分で確認してください。

=====ここから、引用=====
// シリアライズされたセッションデータ保管用項目名。
// 読み出し用関数の作成が楽だったので、これも
// 保管するようにしちゃいました。
define(S_RAW_DATA_FIELDNAME, "rawdata");

// セッションID保管用項目名。
define(S_SID_FIELDNAME, "sid");

// セッション登録日保管用項目名。
define(S_RDATE_FIELDNAME, "rdate");

=====ここまで=====

参考URL:http://www.stackasterisk.jp/tech/php/php03_06.jsp
    • good
    • 0
この回答へのお礼

chukenkenkou様

はじめまして、こんにちは。
仰るとおり、この定義はstackasterisk.jp様のところからの引用です。

chukenkenkou様も仰るように、サイト内のコードにはコメントで説明があるのですが、DBのフィールド属性であるtimestamp default 'now'が、MySQLでは使えないといった記事もあったりしたので、MySQLの場合、どのような属性が適切なのかをお教えいただければと質問させて頂きました。

このての説明も、いくつかのサイトには記してあるのですが、動作確認をしようにも、このサンプルコード自体を動かす事が出来ずにおりまして、コードが原因なのか、DBの設定が原因なのか、を解消できればと…。

お礼日時:2006/07/03 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す