Подтвердить что ты не робот

CURRENT_DATE/CURDATE() не работает как значение DATE по умолчанию

Довольно прямой вопрос здесь, я думаю, что это должно работать, но это не так. Почему это не так?

CREATE TABLE INVOICE(
   INVOICEDATE DATE NOT NULL DEFAULT CURRENT_DATE
)
4b9b3361

Ответ 1

Он не работает, потому что он не поддерживается

В предложении DEFAULT указано значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; это не может быть функцией или выражением. Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, например NOW() или CURRENT_DATE. Исключением является то, что вы можете указать CURRENT_TIMESTAMP как значение по умолчанию для столбца TIMESTAMP

http://dev.mysql.com/doc/refman/5.5/en/create-table.html

Ответ 2

объявите свой столбец даты NOT NULL, но без значения по умолчанию. Затем добавьте этот триггер:

USE `ddb`;
DELIMITER $$
CREATE TRIGGER `default_date` BEFORE INSERT ON `dtable` FOR EACH ROW
if ( isnull(new.query_date) ) then
 set new.query_date=curdate();
end if;
$$
delimiter ;

Ответ 3

create table the_easy_way(
  capture_ts DATETIME DEFAULT CURRENT_TIMESTAMP,
  capture_dt DATE AS (DATE(capture_ts))
)

(MySQL 5.7)

Ответ 4

Как правильно ответит другой ответ, вы не можете использовать динамические функции в качестве значения по умолчанию. Вы можете использовать TIMESTAMP с атрибутом CURRENT_TIMESTAMP, но это не всегда возможно, например, если вы хотите сохранить как создание, так и обновленную временную метку, и вам понадобится только разрешенный столбец TIMESTAMP для второго.

В этом случае используйте триггер вместо.

Ответ 5

Согласно этой документации, начиная с MySQL 8.0.13, вы сможете указать:

CREATE TABLE INVOICE(
    INVOICEDATE DATE DEFAULT (CURRENT_DATE)
)

К сожалению, на сегодняшний день эта версия еще не выпущена. Вы можете проверить здесь для последних обновлений.

Ответ 6

----- 2016-07-04 MariaDB 10.2.1 - Информация о релизе - -----

Поддержка DEFAULT с выражениями (MDEV-10134).

----- 2018-10-22 8.0.13 Общая доступность - - -----

MySQL теперь поддерживает использование выражений в качестве значений по умолчанию в спецификациях типов данных. Это включает в себя использование выражений в качестве значений по умолчанию для типов данных BLOB, TEXT, GEOMETRY и JSON, которые ранее не могли назначаться значениям по умолчанию вообще. Подробнее см. Тип данных по умолчанию.