Как отключить ПО УМОЛЧАНИЮ и ПРИ ОБНОВЛЕНИИ при создании таблицы

После нескольких часов отладки моего 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 и посмотрю на структуру этой таблицы, она будет выглядеть так: Как отключить ПО УМОЛЧАНИЮ и ПРИ ОБНОВЛЕНИИ при создании таблицы

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
400
1

Ответы 1

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

If explicit_defaults_for_timestamp is disabled, the server enables the nonstandard behaviors and handles TIMESTAMP columns as follows:

  • TIMESTAMP columns not explicitly declared with the NULL attribute are automatically declared with the NOT NULL attribute. Assigning such a column a value of NULL is permitted and sets the column to the current timestamp.

  • The first TIMESTAMP column in a table, if not explicitly declared with the NULL attribute or an explicit DEFAULT or ON UPDATE attribute, is automatically declared with the DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP attributes.

  • TIMESTAMP columns following the first one, if not explicitly declared with the NULL attribute or an explicit DEFAULT attribute, are automatically declared as DEFAULT '0000-00-00 00:00:00' (the “zero” timestamp). For inserted rows that specify no explicit value for such a column, the column is assigned '0000-00-00 00:00:00' and no warning occurs.

    Depending on whether strict SQL mode or the NO_ZERO_DATE SQL mode is enabled, a default value of '0000-00-00 00:00:00' may be invalid. Be aware that the TRADITIONAL SQL mode includes strict mode and NO_ZERO_DATE. See Section 5.1.11, “Server SQL Modes”.

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

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

есть ли способ установить это с помощью php (когда я делаю соединение mysqli)

Paul Shan 22.03.2019 09:30

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

Nick 22.03.2019 09:59

Как мне это сделать?

Paul Shan 23.03.2019 01:48
SET GLOBAL explicit_defaults_for_timestamp = 1. Если вы не можете этого сделать, вам нужно будет отредактировать файл конфигурации MySQL, как описано в вопросе, который я связал.
Nick 23.03.2019 01:51

Другие вопросы по теме