2012-10-25 16 views
16

既存のデータベースでは、年齢列(INT)を使用しています。今私はdob(DATETIME)として設定する必要があります。MySQLのデフォルトdatetimeからphpmyadmin

私はPHPMyAdminを使って、answer with 138 upvotesで定義されているデフォルト値としてCURRENT_TIMESTAMPを与えます。しかし、PHPMyAdminのは、添付のスクリーンショットのように#1067 - invalid default value for 'dob'を不平を言っている:

Error screenshot

私はそのエラーを取得し、どのようにそれを修正するよ、なぜ誰かが提案してくださいことはできますか?

+6

生年月日がデフォルト値として現在の時間を持つことができるか疑問に思いますか? –

+0

[日付時刻対タイムスタンプ](http://stackoverflow.com/questions/409286/datetime-vs-timestamp) –

+0

@ミスン。ちょうど一時的な価値。後で他の値で変更されます。 –

答えて

18

You can't set DATETIMEでのデフォルト値としてのCURRENT_TIMESTAMP。

ただし、TIMESTAMPを使用して実行できます。

差異hereを参照してください。データ型仕様でthisブログから

言葉

DEFAULT value条項はカラムのデフォルト値を示します。 1つの例外を除き、デフォルト値は定数でなければなりません。関数または式にすることはできません。

これは、たとえば、日付列のデフォルトをNOW()やCURRENT_DATEなどの関数の値に設定できないことを意味します。

ただし、TIMESTAMP列のデフォルトとしてCURRENT_TIMESTAMPを指定できます。

+0

ありがとうございます。一時的な値としてnullを使用しました。当初、私は 'not null'を通ってデフォルト値として現在の日付を使用しようとしていましたが、不可能であるようです。一時的にnullが許可され、機能しました。 –

0

デフォルト値current_timeがタイプDATETIMEに対して無効なため、このエラーが発生しています。それはそれが言っていることです、そして、それは起こっていることです。

current_timeを使用できる唯一のフィールドはタイムスタンプです。

2

私はあなたがmysqlの日付でそれを達成できるとは思わない。あまりにTIMESTAMPとしてフィールドのタイプを設定し

/************ ROLE ************/ 
drop table if exists `role`; 
create table `role` (
    `id_role` bigint(20) unsigned not null auto_increment, 
    `date_created` datetime, 
    `date_deleted` datetime, 
    `name` varchar(35) not null, 
    `description` text, 
    primary key (`id_role`) 
) comment=''; 

drop trigger if exists `role_date_created`; 
create trigger `role_date_created` before insert 
    on `role` 
    for each row 
    set new.`date_created` = now(); 
0

DateTimeのための最善の方法は、トリガを使用..ですタイムスタンプを使用するか、この方法を試してみて下さい。

enter image description here

0

:あなたは

CREATE TRIGGER table_OnInsert BEFORE INSERT ON `DB`.`table` 
FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW());