MySQL datetime по умолчанию через phpmyadmin
В существующей базе данных у меня есть возрастный столбец (INT). Теперь мне нужно установить его как dob (DATETIME).
Я пытаюсь сделать это через PHPMyAdmin, давая CURRENT_TIMESTAMP в качестве значения по умолчанию, как определено ответом с 138 upvotes. Однако PHPMyAdmin жалуется #1067 - invalid default value for 'dob'
на прилагаемый скриншот:
![Error screenshot]()
Кто-нибудь может спросить, почему я получаю эту ошибку и как ее исправить?
Ответы
Ответ 1
Вы не можете установить CURRENT_TIMESTAMP как значение по умолчанию с DATETIME.
Но вы можете сделать это с помощью TIMESTAMP.
Посмотрите разницу здесь.
Слова из этот блог
Предложение значения DEFAULT в спецификации типа данных указывает значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; это не может быть функцией или выражением.
Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, такой как NOW() или CURRENT_DATE.
Исключением является то, что вы можете указать CURRENT_TIMESTAMP как значение по умолчанию для столбца TIMESTAMP.
Ответ 2
Я не думаю, что вы можете достичь этого с помощью mysql date. Вы должны использовать временную метку или попробовать этот подход.
CREATE TRIGGER table_OnInsert BEFORE INSERT ON `DB`.`table`
FOR EACH ROW SET NEW.dateColumn = IFNULL(NEW.dateColumn, NOW());
Ответ 3
Вы получаете эту ошибку, потому что значение по умолчанию current_time
недопустимо для типа DATETIME
. Это то, что он говорит, и что происходит.
Единственное поле, в котором вы можете использовать current_time
on, - это отметка времени.
Ответ 4
Лучший способ для 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();
Ответ 5
Задайте тип поля как TIMESTAMP тоже.
![введите описание изображения здесь]()