MySQL datetime по умолчанию через phpmyadmin - программирование
Подтвердить что ты не робот

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

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

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

Error screenshot

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

4b9b3361

Ответ 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 тоже.

введите описание изображения здесь