MySQL по умолчанию datetime через phpmyadmin

в существующей базе данных у меня есть столбец age (INT). Теперь мне нужно установить его как dob (DATETIME).

Я пытаюсь сделать это через PHPMyAdmin, давая CURRENT_TIMESTAMP как значение по умолчанию, как определено ответ с 138 upvotes. Однако PHPMyAdmin жалуется #1067 - invalid default value for 'dob' как на прилагаемом скриншоте:

Error screenshot

кто-нибудь может предположить, почему я получаю эту ошибку и как это исправить?

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();

Установите тип поля как отметку времени.

enter image description here