Я использую таблицу в 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 */
Я не понимаю. Где ошибка?
Не работает. Все еще получаю ту же ошибку.
Вы делаете что-то не так. dbfiddle.uk/QRedMqCw
Теперь я хотел использовать тот же синтаксис на сервере MariaDB. Какая точная версия MariaDB? Может быть, это слишком старо?
Версия MariaDB 10.1.48 на Debian Linux 9
start
ПО УМОЛЧАНИЮ NULL, stop
ПО УМОЛЧАНИЮ NULL, затем используйте diff
TIME NULL ПО УМОЛЧАНИЮ NULL Или установите по умолчанию 0
Версия MariaDB 10.1.48 Слишком древняя версия... если обновление версии невозможно, используйте триггер BEFORE INSERT.
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.
Необходимое значение по умолчанию является выражением. Поэтому он должен быть заключен в круглые скобки:
.. `diff` TIME NOT NULL DEFAULT (timediff(`stop`,`start`)) ..