MySQL по умолчанию datetime через phpmyadmin
в существующей базе данных у меня есть столбец age (INT). Теперь мне нужно установить его как dob (DATETIME).
Я пытаюсь сделать это через PHPMyAdmin, давая CURRENT_TIMESTAMP как значение по умолчанию, как определено ответ с 138 upvotes. Однако PHPMyAdmin жалуется #1067 - invalid default value for 'dob'
как на прилагаемом скриншоте:
кто-нибудь может предположить, почему я получаю эту ошибку и как это исправить?
5 ответов
вы не можете установить CURRENT_TIMESTAMP в качестве значения по умолчанию с DATETIME.
но вы можете сделать это с меткой времени.
увидеть разницу здесь.
слова этой блог
предложение value по умолчанию в спецификации типа данных указывает значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; оно не может быть функцией или выражением.
Это означает, для например, вы не можете установить значение по умолчанию для столбца даты как значение функции, такой как NOW() или CURRENT_DATE.
исключение состоит в том, что вы можете указать CURRENT_TIMESTAMP как значение по умолчанию для столбца TIMESTAMP.
Я не думаю, что вы можете достичь этого с датой mysql. Вы должны использовать timestamp или попробовать этот подход..
CREATE TRIGGER table_OnInsert BEFORE INSERT ON `DB`.`table`
FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW());
вы получаете эту ошибку, потому что значение по умолчанию current_time
недопустимо для типа DATETIME
. Вот что там написано, вот что происходит.
единственное поле, которое вы можете использовать current_time
на это времени.
лучший способ для DateTime - использовать триггер:
/************ 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();