Как отключить DEFAULT и ON UPDATE при создании таблицы - PullRequest
1 голос
/ 22 марта 2019

После нескольких часов отладки моего PHP-кода из-за неправильного хранения дат я понял, что XAMPP автоматически добавляет атрибут DEFAULT и атрибут ON UPDATE в мой столбец date_added.

У меня есть эта таблица:

CREATE TABLE test_table(
    date_added          timestamp
                        NOT NULL,

    last_updated        timestamp
                        NOT NULL
);

Как вы можете видеть, я явно не устанавливаю значение DEFAULT или тег ON UPDATE в своем коде создания таблицы.Однако, если я зайду в phpmyadmin и посмотрю на структуру этой таблицы, она будет выглядеть следующим образом: Structure of table

Я попытался нажать «изменить» и установить DEFAULT вNone и ON UPDATE пусто, но это не меняет его.Любые предложения о том, как я могу удалить эти вещи?

1 Ответ

1 голос
/ 22 марта 2019

Это из-за установки системной переменной explicit_defaults_for_timestamp, которая в MySQL <8.0.2 по умолчанию <code>OFF. Когда это OFF,

Если явное_дефекты_for_timestamp отключены, сервер включает нестандартное поведение и обработка столбцов TIMESTAMP следующим образом:

  • Столбцы TIMESTAMP, явно не объявленные с атрибутом NULL, автоматически объявляются с атрибутом NOT 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» и без предупреждения происходит.

    В зависимости от того, включен режим строгого SQL или режим SQL NO_ZERO_DATE, значение по умолчанию «0000-00-00 00:00:00» может быть недействительным. Имейте в виду, что традиционный режим SQL включает строгий режим и NO_ZERO_DATE. См. Раздел 5.1.11, «Режимы SQL сервера».

См. руководство .

В этом вопросе обсуждается, как изменить настройку.

...