Отметка времени MariaDB не обновляет дату

Для меня это простое решение с относительно небольшим количеством факторов. Факторы таковы:

  1. Хранилища предназначены для классов домена.
  2. В некоторых моих приложениях классы домена такие же, как и классы персистентности (DAL), в других они not.
  3. Когда они совпадают, EF уже предоставляет мне репозитории.
  4. EF обеспечивает ленивую загрузку и IQueryable. Мне нравится это.
  5. Тезисы / «фасад» / повторное использование репозитория над EF обычно означает потерю лени и IQueryable

Итак, если мое приложение не может оправдать # 2, отдельные модели домена и данных, тогда я обычно не буду беспокоиться о # 5.

0
задан Siva 17 January 2019 в 11:07
поделиться

1 ответ

(Если я правильно помню) В этой старой версии такой DEFAULT мог быть применен только к первому TIMESTAMP в таблице. Пожалуйста, предоставьте SHOW CREATE TABLE.

Пожалуйста, рассмотрите возможность перехода на InnoDB.

Из журнала изменений 5.6.6:

В MySQL тип данных TIMESTAMP нестандартным образом отличается от других типов данных:

Столбцам TIMESTAMP , явно не объявленным с атрибутом NULL, присваивается атрибут NOT NULL. (Столбцы других типов данных, если они явно не объявлены как NOT NULL, допускают значения NULL.) Установка для такого столбца значения NULL устанавливает его в текущую метку времени.

Первому столбцу TIMESTAMP в таблице, если он не объявлен с атрибутом NULL или явным предложением DEFAULT или ON UPDATE, автоматически назначаются атрибуты DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP.

TIMESTAMP столбцы после первого, если они не объявлены с атрибутом NULL или явным предложением DEFAULT, автоматически присваиваются DEFAULT '0000-00-00 00:00:00' («ноль») отметка времени). Для вставленных строк, которые не указывают явного значения для такого столбца, столбцу присваивается значение «0000-00-00 00:00:00», и предупреждение не появляется.

Эти нестандартные поведения остаются по умолчанию для TIMESTAMP , но теперь устарели, и это предупреждение появляется при запуске:

[Warning] TIMESTAMP с неявным значением DEFAULT устарело. Пожалуйста, используйте параметр сервера --explicit_defaults_for_timestamp (см. Документацию для более подробной информации).

Как указано в предупреждении, чтобы отключить нестандартное поведение, включите новую системную переменную [118 ]licit_defaults_for_timestamp при запуске сервера. Если эта переменная включена, сервер обрабатывает TIMESTAMP следующим образом:

TIMESTAMP , явно не объявленные как NOT NULL, допускают значения NULL. Установка такого столбца в NULL устанавливает его в NULL, а не в текущую метку времени.

Нет столбца TIMESTAMP , которому автоматически присваиваются атрибуты DEFAULT CURRENT_TIMESTAMP или ON UPDATE CURRENT_TIMESTAMP. Эти атрибуты должны быть явно указаны.

столбцы TIMESTAMP , объявленные как NOT NULL и без явного предложения DEFAULT, обрабатываются как не имеющие значения по умолчанию. Для вставленных строк, которые не указывают явного значения для такого столбца, результат зависит от режима SQL. Если включен режим строгого SQL, возникает ошибка. Если режим строгого SQL не включен, столбцу присваивается неявное значение по умолчанию «0000-00-00 00:00:00», и появляется предупреждение. Это подобно тому, как MySQL обрабатывает другие временные типы, такие как DATETIME .

0
ответ дан Rick James 17 January 2019 в 11:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: