@Heggi

MySQL 8.0.16 Некорректное поведение с curdate?

Есть таблица
CREATE TABLE `client_balance` (
  `client_id` int(11) NOT NULL,
  `period` date NOT NULL DEFAULT (curdate()),
  `base_balance` decimal(20,2) NOT NULL DEFAULT '0.00',
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci


Любая попытка изменить любое поле (кроме period) заканчивается ошибкой
ERROR 1067 (42000): Invalid default value for 'period'

Стоит MySQL 8.0.16, поддержка выражений в DEFAULT появилась в версии 8.0.13,
Таких проблем с колонками других типов нет.
Причину нагуглить не получилось, но очень похоже на баг.
  • Вопрос задан
  • 522 просмотра
Пригласить эксперта
Ответы на вопрос 2
Sanovskiy
@Sanovskiy
Веб-разработчик с 2005 года
The DEFAULT clause specifies a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression. This means, for example, that you cannot set the default for a date column to be the value of a function such as NOW() or CURRENT_DATE. The exception is that you can specify CURRENT_TIMESTAMP as the default for a TIMESTAMP column

Кратко говоря, в дефолтах можно использовать только константы. Используйте CURRENT_TIMESTAMP. Это работает
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Проблема в том чт инициализация должна быть константой
...
`period` date NOT NULL DEFAULT (CURRENT_DATE),
....

Должно работать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы