Помилка пов'язана з режимом sql, який може бути суворим режимом відповідно до останньої документації MYSQL 5.7
Документація MySQL 5.7 говорить :
Суворий режим впливає на те, чи дозволяє сервер "0000-00-00" як дійсну дату: Якщо суворий режим не ввімкнено, "0000-00-00" дозволено, і вставки не створюють попередження. Якщо ввімкнено суворий режим, "0000-00-00" заборонено, і вставки створюють помилку, якщо також не вказано IGNORE. Для INSERT IGNORE та UPDATE IGNORE дозволено "0000-00-00", і вставки створюють попередження.
Перевірка режиму MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Вимкнення режиму STRICT_TRANS_TABLES
Однак, щоб дозволити формат, 0000-00-00 00:00:00
вам потрібно відключити режим STRICT_TRANS_TABLES у файлі конфігурації mysql або за допомогою команди
За командою
SET sql_mode = '';
або
SET GLOBAL sql_mode = '';
Використання ключового слова GLOBAL
вимагає надзвичайних попередніх налаштувань, і це впливає на операції, з якими підключаються всі клієнти з того часу
якщо вище не працює, ніж перейти до /etc/mysql/my.cnf
(відповідно до ubuntu) та коментуватиSTRICT_TRANS_TABLES
Крім того , якщо ви хочете остаточно встановити SQL режим при запуску сервера потім включити SET sql_mode=''
в my.cnf
на Linux або MacOS. Для Windows це потрібно зробити у my.ini
файлі.
Примітка
Однак суворий режим не включений за замовчуванням у MYSQL 5.6. Отже, це не створює помилки відповідно до документації MYSQL 6, яка говорить
MySQL дозволяє зберігати "нульове" значення "0000-00-00" як "фіктивну дату". Це в деяких випадках зручніше, ніж використання значень NULL, і використовується менше даних та простору індексів. Щоб заборонити "0000-00-00", увімкніть режим SQL NO_ZERO_DATE.
ОНОВЛЕННЯ
Щодо питання про помилку, як сказав @ Dylan-Su:
Я не думаю, що це помилка в тому, як MYSQL еволюціонував з часом, завдяки чому деякі речі змінюються на основі подальшого вдосконалення продукту.
Однак у мене є ще один відповідний звіт про помилку щодо NOW()
функції
Поле дати не приймає ЗАРАЗ ()
Ще одна корисна примітка [див. Автоматична ініціалізація та оновлення для TIMESTAMP та DATETIME ]
Станом на MySQL 5.6.5, стовпці TIMESTAMP та DATETIME можна автоматично ініціалізувати та оновлювати до поточної дати та часу (тобто поточної позначки часу). До 5.6.5 це справедливо лише для TIMESTAMP, і щонайменше для одного стовпця TIMESTAMP на таблицю. Наступні примітки спочатку описують автоматичну ініціалізацію та оновлення для MySQL 5.6.5 і вище, потім відмінності для версій, що передують 5.6.5.
Оновлення щодо NO_ZERO_DATE
Станом на 5.7.4 для MySQL цей режим застарілий. Для попередньої версії потрібно прокоментувати відповідний рядок у конфігураційному файлі. Зверніться до документації MySQL 5.7 NO_ZERO_DATE
NULL
є.