Błąd jest spowodowany trybem sql, który może być trybem ścisłym zgodnie z najnowszą dokumentacją MYSQL 5.7
Tryb ścisły ma wpływ na to, czy serwer zezwala na „0000-00-00” jako prawidłową datę:Jeśli tryb ścisły nie jest włączony, dozwolony jest „0000-00-00”, a wstawki nie generują ostrzeżenia. Jeśli tryb ścisły jest włączony, „0000- 00-00' jest niedozwolone, a wstawki powodują błąd, chyba że podano również IGNORE. W przypadku INSERT IGNORE i UPDATE IGNORE dozwolone jest „0000-00-00”, a wstawki generują ostrzeżenie.
Aby sprawdzić tryb MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Wyłączanie trybu STRICT_TRANS_TABLES
Jednak aby zezwolić na format 0000-00-00 00:00:00
musisz wyłączyć tryb STRICT_TRANS_TABLES w pliku konfiguracyjnym mysql lub komendą
Na polecenie
SET sql_mode = '';
lub
SET GLOBAL sql_mode = '';
Używanie słowa kluczowego GLOBAL
wymaga superuprawnień i wpływa na operacje, które od tego czasu łączą wszyscy klienci
jeśli powyższe nie działa, przejdź do /etc/mysql/my.cnf
(zgodnie z ubuntu) i skomentuj STRICT_TRANS_TABLES
Ponadto, jeśli chcesz na stałe ustawić tryb sql podczas uruchamiania serwera, dołącz SET sql_mode=''
w my.cnf
w systemie Linux lub MacOS. W przypadku systemu Windows należy to zrobić w my.ini
plik.
Uwaga
Jednak tryb ścisły nie jest domyślnie włączony w MYSQL 5.6. Dlatego nie powoduje błędu zgodnie z Dokumentacja MYSQL 6 co mówi
MySQL pozwala na przechowywanie wartości „zerowej” „0000-00-00” jako „fałszywej daty”. W niektórych przypadkach jest to wygodniejsze niż używanie wartości NULL i zużywa mniej miejsca na dane i indeksy. Aby zabronić '0000-00-00', włącz tryb SQL NO_ZERO_DATE.
AKTUALIZUJ
Odnośnie sprawy błędu, jak powiedział @Dylan-Su:
Nie sądzę, że jest to błąd w sposobie, w jaki MYSQL ewoluował na przestrzeni czasu, przez co niektóre rzeczy są zmieniane w oparciu o dalsze ulepszanie produktu.
Mam jednak inny powiązany raport o błędzie dotyczący NOW()
funkcja
Pole daty i godziny nie akceptuje domyślnej funkcji NOW()
Kolejna przydatna uwaga [patrz Automatyczna inicjalizacja i aktualizacja dla TIMESTAMP i DATETIME ]
Od wersji MySQL 5.6.5 kolumny TIMESTAMP i DATETIME mogą być automatycznie inicjowane i aktualizowane do bieżącej daty i godziny (czyli aktualnego znacznika czasu). Przed 5.6.5 dotyczy to tylko TIMESTAMP i co najwyżej jednej kolumny TIMESTAMP na tabelę. Poniższe uwagi najpierw opisują automatyczną inicjalizację i aktualizację dla MySQL 5.6.5 i nowszych, a następnie różnice dla wersji wcześniejszych niż 5.6.5.
Aktualizacja dotycząca NO_ZERO_DATE
W MySQL od 5.7.4 ten tryb jest przestarzały. W przypadku poprzedniej wersji musisz zakomentować odpowiednią linię w pliku konfiguracyjnym. Zapoznaj się z dokumentacją MySQL 5.7 NO_ZERO_DATE