Почему синтаксис "ON UPDATE CONVERT_TZ" не работает для колонки "updated_at", в то время как те же самые выражения для DEFAULT работают, например, "ON UPDATE NOW()"? Я хочу обновлять колонку "updated_at" без использования триггеров и учитывать временную зону. Вот пример кода, в котором я пытаюсь использовать "ON UPDATE CONVERT_TZ": CREATE TABLE `test` ( `id` varchar(36) NOT NULL, `updated_at` datetime NOT NULL DEFAULT (CONVERT_TZ(NOW(),'UTC','Europe/Moscow')) ON UPDATE (CONVERT_TZ(NOW(),'UTC','Europe/Moscow')), )
Ошибка в синтаксисе заключается в том, что ключевое слово "ON UPDATE" не поддерживает функцию CONVERT_TZ напрямую. Вместо этого вы можете использовать триггер для обновления значения колонки "updated_at". Вот пример: CREATE TABLE `test` ( `id` varchar(36) NOT NULL, `updated_at` datetime NOT NULL DEFAULT (CONVERT_TZ(NOW(),'UTC','Europe/Moscow')) ); DELIMITER $$ CREATE TRIGGER `update_test` BEFORE UPDATE ON `test` FOR EACH ROW BEGIN SET NEW.updated_at = CONVERT_TZ(NOW(),'UTC','Europe/Moscow'); END$$ DELIMITER ; В этом примере мы создаем таблицу "test" с колонкой "updated_at" по умолчанию установленной на текущую дату и временную зону. Затем мы создаем триггер "update_test", который будет вызываться перед каждым обновлением строки в таблице "test". Внутри триггера мы устанавливаем значение новой колонки "updated_at" на текущую дату и временную зону, используя функцию CONVERT_TZ. Таким образом, при каждом обновлении строки в таблице "test" значение колонки "updated_at" автоматически обновляется с учетом временной зоны.