• ベストアンサー

MySQLのtimestamp型について

MySQLのtimestamp型で質問があるのですが、not nullの指定はできるのでしょうか? また、代入方法はPerlの場合、現在の日時をYYYYMMDDHHMMSS形式の文字列を簡単に作成したいのですが、どのような方法があるのでしょうか? あと、私は日付の場合はint(11)として、日付のシリアル値(1970年からの経過秒)をよく利用していました。理由は、後で足し引きなど計算しやすい為です。それで、日付型というものは使ったことがありません。 みなさんは、この日付関数利用する目的や必要性などありましたら、教えてください。

  • MySQL
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>timestamp型で質問があるのですが、not nullの指定はできるのでしょうか? 仕様上できないようです。 timestamp型はあくまで更新日時を取得するような用途ですから 特定の日時をデフォルト値にはもちません。よって デフォルト値がNULLになっており、NULLを指定すると 現在の時刻がはいります。

その他の回答 (1)

回答No.2

まずは、マニュアルを見ましょうよ。 MySQLのTIMESTAMP型は、他のRDBMSとは異なり特殊です。ユーザ任意のタイムスタンプではなく、MySQLが勝手に格納します。 ユーザ任意のタイムスタンプを入れる場合は、DATETIME型を使います。 >代入方法はPerlの場合、現在の日時をYYYYMMDDHHMMSS形式の文字列を簡単に作成したい 何を聞かれているのか分かりませんが? >この日付関数利用する目的や必要性 日時を使うと、視認性が上がります。SQLで、日付の範囲や日付演算が容易に行えます。いちいちシリアル値に変換したりする必要がなくなります。 DB操作するアプリケーションは、一つではありません。多くのアプリケーションで操作したり、確認することがありえます。シリアル値などで格納していたら、値の意味が分かりません。

関連するQ&A

  • TIMESTAMP型のカラムに作成日時がセットされません

    WindowsでMySQL4.1.12を使っていますが、mysqlimport でインポートした時、TIMESTAMP型のカラムに作成日時 がうまく自動的にセットされません。MySQLの マニュアルにはTIMESTAMP型のカラムには\N(NULL値) を設定すればいいとあるのですが、うまくいきません。 どうしたらうまく自動的にセットされるでしょうか? よろしくお願いします。

  • MySQLでエラーがでます

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"8cb2237d0679ca88db6464eac60da96345513964", created"2011-10-05 15:16:04"' at line 1 PHPをブラウザで開いて動作確認すると上記のようにエラーがでてしまいます。 dbはこんな感じで作りました。 CREATE TABLE `class_orms`.`members` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 255 ) NOT NULL , `email` VARCHAR( 255 ) NOT NULL , `password` VARCHAR( 100 ) NOT NULL , `created` DATETIME NOT NULL , `modified` TIMESTAMP NOT NULL ) ENGINE = MYISAM ; CREATE TABLE `class_orms`.`posts` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `message` TEXT NOT NULL , `member_id` INT NOT NULL , `reply_post_id` INT NOT NULL , `created` DATETIME NOT NULL , `modified` TIMESTAMP NOT NULL ) ENGINE = MYISAM ; SQL側の1行目でエラーがあるということなのでしょうか? どなたか回答よろしくお願いします。 動作環境------------------- Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 phpMyAdmin バージョン情報: 3.2.4

    • ベストアンサー
    • MySQL
  • PHPでMySQLを利用した予約カレンダー

    PHPでMySQLを利用した予約カレンダーを作成しなければならない課題なのですが、初心者同然の知識ではなかなか難しく、また、思うようなサンプルも見つからず、困っています…。 希望としては、カレンダー表示(うるう年計算や祝日情報を含む)で、データベースに予定が入っていなければ日付にリンク付けをし、枠内に○印を記載、そりてリンクからは予約項目入力ページに移動させるようにしたいと思っています。また、データベースに予定が入っていれば日付のリンク付けはなしで枠内に×印を表示して予約が出来ないようにしたいと考えています。 下記が予約状況を入れたMySQLテーブルです。 mysql> desc reserve; +--------------+-----------+----+---+-----------------+---------------------------+ |Field |Type |Null|Key|Default |Extra | +--------------+-----------+----+---+-----------------+---------------------------+ |会員ID |varchar(10)|NO |MUL|NULL | | |部屋NO |int(3) |NO |MUL|NULL | | |人数:大人 |int(3) |NO | |NULL | | |人数:子ども |int(3) |NO | |NULL | | |チェックイン |date |NO | |NULL | | |チェックアウト|date |NO | |NULL | | |宿泊プランNO |int(10) |NO |MUL|NULL | | |予約登録日 |timestamp |NO | |CURRENT_TIMESTAMP|on update CURRENT_TIMESTAMP| +--------------+-----------+----+---+-----------------+---------------------------+ 出来ればサンプルコード、もしくは希望のサンプルが乗ったURLなどをお教え頂きたく思います。 また、予約画面ではチェックアウト日選択(チェックイン日から1週間以内)や、人数を入力していただくテキストフィールドと宿泊プランの選択プルダウンをつけるつもりでいます。 すみませんがどなたかこの初心者に救いのお手をお貸しくださいませ。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLで項目の反復定義(COBOLでいうところのOCCURS)はあ

    MySQLで項目の反復定義(COBOLでいうところのOCCURS)はありますか? 今は AAA1 varchar(10) not null BBB1 int(6) not null CCC1 int(2) not null AAA2 varchar(10) not null BBB2 int(6) not null CCC2 int(2) not null  :  : AAA30 varchar(10) not null BBB30 int(6) not null CCC30 int(2) not null みたいに書いています。 XXX OCCURS 30 AAA varchar(10) not null BBB int(6) not null CCC int(2) not null のような書き方があればと思ったのですが。。 ご存知の方いらっしゃいましたら、 また他に良い方法をご存知の方いらっしゃいましたら ご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • PostgreSQLからMySQLへ変換

    現在ECサイトに追加カスタマイズ機能を導入したいと考えているのですが、 その際の使用コードが以下のようにPostgreSQLの記載となっており、 使用しているphpMyAdminにてSQLコードを入力するとエラーとなってしまいます。 ↓PostgreSQLコード CREATE TABLE dtb_bookmark ( bookmark_id serial NOT NULL, customer_id integer NOT NULL, product_id integer NOT NULL, memo text, create_date timestamp without time zone NOT NULL, update_date timestamp without time zone NOT NULL, del_flg integer ); ALTER TABLE ONLY dtb_bookmark ADD CONSTRAINT dtb_bookmark_pkey PRIMARY KEY (bookmark_id); COMMENT ON TABLE dtb_bookmark IS 'お気に入り情報'; エラーはtimestamp型とALTER以降の文で発生致します。 mysql文にて解釈させるにはどのように変更したらよろしいのでしょうか? 使用mysqlバージョンはMySQL 4.1.21です。 アドバイスなど頂けましたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHP+mysql データ重複登録

    ◆PHPバージョン 5.3.3 ◆mysqlバージョン 4.1.22 ◆テーブル情報 `no` int(11) NOT NULL auto_increment, `name` text NOT NULL, `mail` text NOT NULL, `memo` text NOT NULL, `updating` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`no`) ENGINE=MyISAM DEFAULT CHARSET=utf8 ◆SQL (1)insert into test(name, mail, memo) values ('abc','abc@test.com','abc') (2)insert test set name='abc', mail='abc@test.com', memo='abc' ◆処理概要 $conn = mysql_connect(ホスト、ユーザ、パスワード); mysql_query("set names utf8"); $rs = mysql_select_db(DB名, $conn); $result = mysql_query(SQL, $conn); ◆登録情報 (1, 'abc', 'abc@test.com', 'abc', '2011-09-02 16:28:57'), (2, '', '', '', '2011-09-02 16:28:57'), 【問題】 上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう 全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • Mysqlのupdate文

    Mysql3.23.42+PHPで下記のようなテーブルで Field| Type ----+------------  a | int  b | varchar  c | varchar  d | timestamp  e | timestamp update文を実行すると、 例  update set b='あ',c='い',e=NULL where a='1'; dまでアッデートされてしまうのですが何ででしょう? 何か特別なことしなくてはいけないのでしょうか?

  • TIMESTAMPについて

    MySQLを用いて会員管理システムを構築しております。 仮登録者テーブルと本登録者テーブルの二つを用意しており、 仮登録者の本人確認が取れた時点で、本登録者テーブルへ データを丸々コピーする仕様にしております。 この際に、仮登録日時をTIMESTAMPを用いて日時を取得していますが、 本登録者テーブルへデータをコピーするタイミングで、【 本登録日時 】を 計算させるSQL文等をどの様に記述すればいいのかが分かりません。 現在は、この様なSQL文にしております。 ---------------------------------------------------------------------- $sql = "INSERT INTO user_table SELECT * FROM user_table_2 WHERE (number = ".intval($number).");"; ---------------------------------------------------------------------- user_table_2( 仮登録者テーブル )のデータをuser_table( 本登録者テーブル )へ コピーします。 【 仮登録の日時 】+【 本登録操作を行った日時 】=【 本登録日時 】という計算を WHERE句で実行出来るものなのでしょうか? それとも他に別の方法がありましたら、何卒ご教授いただきたく存じます。 各スペックは以下の通りです。 ---------------------------------- PHP 5.1.6 MySQL 5.0.77 サーバOS Linux ---------------------------------- どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 投稿サイトをサクッと作りたい

    http://webeg.info/php-course/step3-030/のログイン画面をログインして、投稿サイトを作りたいのですが、 ログイン情報はどこで定義してなんというものになっているのでしょうか? 空にして もログインできません。 投稿部分だけが欲しいのですが、ログインしないと作れないようです。 もちろんもっと簡単に投稿サイトが作れる情報があればそれでも構いません。 CREATE TABLE `users` ( `user_id` int(11) NOT NULL COMMENT '通しID', `user_loginid` varchar(20) NOT NULL COMMENT 'ログインID', `user_password` varchar(100) NOT NULL COMMENT 'パスワード', `user_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時', `user_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '作成日時' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理画面ユーザー'; ALTER TABLE `users` ADD PRIMARY KEY (`user_id`); ALTER TABLE `users` MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '通しID', AUTO_INCREMENT=1; アカウントの追加 を実行しただけなのでPW、IDは空と考えてよいでしょうか? パスワードの所には長さ100とコメントパスワードとしか記載がないのですがdbではどこにpwを入れるのですか? この場合は空と考えるべきでしょうか? 投稿サイトをサクッと作りたいだけなのですが、もっと簡単に作る方法はないのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL