在现有的数据库中,我使用了年龄列(INT)。现在我需要将它设置为dob(DATETIME)。通过phpmyadmin的MySQL默认日期时间
我尝试通过PHPMyAdmin进行操作,将CURRENT_TIMESTAMP设置为answer with 138 upvotes定义的默认值。然而phpMyAdmin是抱怨#1067 - invalid default value for 'dob'
为附截图:
可有人请说明为什么我收到的错误,以及如何解决这个问题?
在现有的数据库中,我使用了年龄列(INT)。现在我需要将它设置为dob(DATETIME)。通过phpmyadmin的MySQL默认日期时间
我尝试通过PHPMyAdmin进行操作,将CURRENT_TIMESTAMP设置为answer with 138 upvotes定义的默认值。然而phpMyAdmin是抱怨#1067 - invalid default value for 'dob'
为附截图:
可有人请说明为什么我收到的错误,以及如何解决这个问题?
You can't set CURRENT_TIMESTAMP作为DATETIME的默认值。
但是你可以用TIMESTAMP做到这一点。
在数据类型规范的默认值子句
词表示用于一列的默认值。有一个例外,默认值必须是常数;它不能是一个函数或表达式。
这意味着,例如,您不能将日期列的默认值设置为NOW()或CURRENT_DATE等函数的值。
例外是,您可以指定CURRENT_TIMESTAMP作为TIMESTAMP列的默认值。
谢谢。我用null作为临时值。最初我试图通过'not null'并使用当前日期作为默认值,但似乎这是不可能的。暂时允许null,它工作。 –
由于默认值current_time
对DATETIME
类型无效,因此会出现该错误。这就是它说的,这就是发生了什么。
您可以使用current_time
的唯一字段是时间戳。
我不认为你可以实现与MySQL日期。你必须使用时间戳或尝试此方法..
CREATE TRIGGER table_OnInsert BEFORE INSERT ON `DB`.`table`
FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW());
的日期时间的最好方法是使用触发器:
/************ 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();
想知道出生日期可以有当前时间作为默认值吗? –
[DATETIME Vs TIMESTAMP](http://stackoverflow.com/questions/409286/datetime-vs-timestamp) –
@Mithun。只是暂时的价值。后来会随着其他值改变。 –