ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

MySQLコミュの質問です!

  • mixiチェック
  • このエントリーをはてなブックマークに追加
皆様、はじめましてテステスと申します
UPDATEがうまくいきません
TIMESTAMP(8)で指定している値が、SETで指定してないのに勝手に更新されて今日の日付が入ってしまいます。

具体的には
CREATE TABLE USERS(
USER_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
BBS_ID VARCHAR(16) NOT NULL,
PASSWD VARCHAR(8) NOT NULL,
EMAIL VARCHAR(255) NOT NULL,
SELECTED_SAMPLE INT NOT NULL,
SEX ENUM('M','F') NOT NULL,
BIRTHDAY TIMESTAMP(8) NOT NULL,
PREF INT(2) NOT NULL,
STATUS ENUM('1','2') NOT NULL,
RANK ENUM('1','2','3','4','5','6') NOT NULL,
CREATE_DATE TIMESTAMP(12) NOT NULL,
UP_DATE TIMESTAMP(12) NOT NULL,
ADULT ENUM('0','1') NOT NULL
);
で作ったのに対して
UPDATE USERS SET RANK = '2',UP_DATE = sysdate(),PAID_DATE = sysdate() WHERE USER_ID ='4'
で更新すると
BIRTHDAY
に20050907と今日の日付が入ってしまいます
どうしてでしょうか?
BIRTHDAYもUPDATEかけて旧データを保存しないといけないのでしょうか
回避策などわかる方いましたら教えて下さい!

コメント(6)

timestampじゃなくてdateを使うといいかもしれません。
http://dev.mysql.com/doc/mysql/ja/datetime.html
TIMESTAMP型はUPDATEやINSERTを実行した時に自動で更新される型です。
私は会員の最終ログイン日を記録する為に使ってます〜。

誕生日ならDATE型で良いと思いますよ。
時刻まで記録するならDATETIMEですね。
既に解決しているようですが,捕捉です.
誕生日なら,DATE型でないと問題があるかと思います.
TIMESTAMPは1970年以降しか格納できませんので,
それ以前の方が登録すると0になってしまいます.

TIMESTAMPは明示的に書かない場合,一番最初の
カラムだけ自動更新されます.
一時的に変えたくないような場合は,
UPDATE USERS SET RANK = '2', BIRTHDAY=BIRTHDAY WHERE USER_ID ='4'
のようにすれば,前の値が保存されます.

自動更新は便利に使えるので,カラムの順序を
更新時刻,作成時刻,のように作っておけば,
更新時刻は自動更新されて便利です.
(作成時刻も,INSERT時にNULLを代入すれば現在時刻になります)

DATETIMEよりTIMESTAMPの方がサイズが小さいので,
わたしは結構よく使っています.(^^;
皆さんレスありがとうございました
解決しました!
DATE型に変更しました〜〜

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

MySQL 更新情報

MySQLのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング