mariadb sql по умолчанию unix_timestamp - PullRequest
1 голос
/ 10 октября 2019

У меня проблемы с изменением столбца в таблице с типа отметки времени на целое число (unix). Для обоих приведенных ниже запросов mysql не позволяет мне выполнить их с ошибкой 1064: «... ошибка в синтаксисе SQL ...» и мой редактор sql (MYSQL WORKBENCH) выделяет красным функцию UNIX_TIMESTAMP сразу после значения по умолчанию и говорит: "UNIX_TIMESTAMP" is not valid at this position, expecting: DATE, TIMESTAMP, TIME, INT number, LONG number, UNLONGLONG number, ...

Что я здесь не так делаю?

ALTER TABLE `lamourka`.`profile` CHANGE `updated_at` `updated_at` 
int(11) NOT NULL DEFAULT UNIX_TIMESTAMP() ON UPDATE UNIX_TIMESTAMP()

ALTER TABLE `lamourka`.`profile` MODIFY COLUMN `updated_at` 
    int(11) NOT NULL DEFAULT UNIX_TIMESTAMP() ON UPDATE UNIX_TIMESTAMP()

pic

Я использую MariaDB. ВЫБРАННАЯ ВЕРСИЯ (): 10.3.9-MariaDB-1: 10.3.9 + maria ~ bionic

1 Ответ

1 голос
/ 10 октября 2019

MySQL не позволяет использовать функции для установки значений по умолчанию.

Я бы рекомендовал использовать тип данных TIMESTAMP. Вы можете получить значения в секунду, используя UNIX_TIMESTAMP().

Демонстрация на DB Fiddle :

CREATE TABLE mytable (id int, updated_at date);
ALTER TABLE mytable MODIFY column updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

INSERT INTO mytable(id) values(1);
SELECT id, UNIX_TIMESTAMP(updated_at) updated_at FROM mytable;

| id  | updated_at |
| --- | ---------- |
| 1   | 1570695109 |

Другой вариант заключается всохранить тип данных столбца как целое число, но затем вручную вызывать UNIX_TIMESTAMP() при каждой вставке.

...