2012-10-25 181 views
16

在现有的数据库中,我使用了年龄列(INT)。现在我需要将它设置为dob(DATETIME)。通过phpmyadmin的MySQL默认日期时间

我尝试通过PHPMyAdmin进行操作,将CURRENT_TIMESTAMP设置为answer with 138 upvotes定义的默认值。然而phpMyAdmin是抱怨#1067 - invalid default value for 'dob'为附截图:

Error screenshot

可有人请说明为什么我收到的错误,以及如何解决这个问题?

+6

想知道出生日期可以有当前时间作为默认值吗? –

+0

[DATETIME Vs TIMESTAMP](http://stackoverflow.com/questions/409286/datetime-vs-timestamp) –

+0

@Mithun。只是暂时的价值。后来会随着其他值改变。 –

回答

18

You can't set CURRENT_TIMESTAMP作为DATETIME的默认值。

但是你可以用TIMESTAMP做到这一点。

查看区别here。从this博客

在数据类型规范的默认值子句

词表示用于一列的默认值。有一个例外,默认值必须是常数;它不能是一个函数或表达式。

这意味着,例如,您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。

例外是,您可以指定CURRENT_TIMESTAMP作为TIMESTAMP列的默认值。

+0

谢谢。我用null作为临时值。最初我试图通过'not null'并使用当前日期作为默认值,但似乎这是不可能的。暂时允许null,它工作。 –

0

由于默认值current_timeDATETIME类型无效,因此会出现该错误。这就是它说的,这就是发生了什么。

您可以使用current_time的唯一字段是时间戳。

2

我不认为你可以实现与MySQL日期。你必须使用时间戳或尝试此方法..

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

的日期时间的最好方法是使用触发器:

/************ 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

设置为时间戳字段的类型了。

enter image description here