MariaDB против MySQL: выражение по умолчанию в определении столбца не работает

Я использую таблицу в MySQL для хранения и расчета разницы во времени при создании материализованных представлений.

CREATE TABLE `creationtime` (
    `view` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `start` DATETIME NULL DEFAULT NULL,
    `stop` DATETIME NULL DEFAULT NULL,
    `diff` TIME NOT NULL DEFAULT timediff(`stop`,`start`)
)
COMMENT='running time'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;

Это работает отлично: значения времени начала и окончания сохраняются, и когда я открываю таблицу, разница во времени рассчитывается на лету.

Теперь я хотел использовать тот же синтаксис на сервере MariaDB (версия MariaDB 10.1.48 в Debian Linux 9). Но я сталкиваюсь с ошибкой.

/* SQL-Error (1064): ошибка в синтаксисе SQL; проверить руководство, соответствующее вашей версии сервера MariaDB, на право синтаксис для использования рядом с 'timediff(`stop`,`start`) ) COMMENT='running time' COLLATE='utf8mb4_general_ci' в строке 5 */

Я не понимаю. Где ошибка?

Необходимое значение по умолчанию является выражением. Поэтому он должен быть заключен в круглые скобки: .. `diff` TIME NOT NULL DEFAULT (timediff(`stop`,`start`)) ..

Akina 13.04.2023 10:18

Не работает. Все еще получаю ту же ошибку.

Juergen Schulze 13.04.2023 10:22

Вы делаете что-то не так. dbfiddle.uk/QRedMqCw

Akina 13.04.2023 10:29

Теперь я хотел использовать тот же синтаксис на сервере MariaDB. Какая точная версия MariaDB? Может быть, это слишком старо?

Akina 13.04.2023 10:30

Версия MariaDB 10.1.48 на Debian Linux 9

Juergen Schulze 13.04.2023 10:48
start ПО УМОЛЧАНИЮ NULL, stop ПО УМОЛЧАНИЮ NULL, затем используйте diff TIME NULL ПО УМОЛЧАНИЮ NULL Или установите по умолчанию 0
Yogendra 13.04.2023 11:03

Версия MariaDB 10.1.48 Слишком древняя версия... если обновление версии невозможно, используйте триггер BEFORE INSERT.

Akina 13.04.2023 11:52
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
7
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

https://mariadb.com/kb/en/create-table/#default-column-option говорит:

Предложение DEFAULT было улучшено в MariaDB 10.2.1. Некоторые улучшения включают в себя:

  • Предложение DEFAULT теперь можно использовать с выражением или функцией.

Поскольку в настоящее время вы используете MariaDB 10.1, вам необходимо выполнить обновление, чтобы получить эту функцию. Поскольку поддержка MariaDB 10.1 закончилась в октябре 2020 года, вы давно должны были выполнить обновление. Версия 10.2 также является EOL, а поддержка версии 10.3 подходит к концу (в следующем месяце, в мае 2023 г.).

Убедитесь, что вы прочитали страницу базы знаний, на которую я ссылался выше, для примеров синтаксиса DEFAULT. Есть небольшие отличия от синтаксиса для выражений по умолчанию в MySQL.

Другие вопросы по теме