Chyba je způsobena režimem sql, který může být přísný režim podle nejnovější dokumentace MYSQL 5.7
Přísný režim ovlivňuje, zda server povolí '0000-00-00' jako platné datum:Pokud přísný režim není povolen, je povoleno '0000-00-00' a vkládání nevytváří žádné varování. Pokud je povolen přísný režim, '0000- 00-00' není povoleno a inserty generují chybu, pokud není zadáno také IGNORE. Pro INSERT IGNORE a UPDATE IGNORE je povoleno '0000-00-00' a vložky vytvářejí varování.
Kontrola režimu MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Deaktivace režimu STRICT_TRANS_TABLES
Chcete-li však povolit formát 0000-00-00 00:00:00
musíte deaktivovat režim STRICT_TRANS_TABLES v konfiguračním souboru mysql nebo příkazem
Příkazem
SET sql_mode = '';
nebo
SET GLOBAL sql_mode = '';
Pomocí klíčového slova GLOBAL
vyžaduje super privilegia a ovlivňuje operace, které se od té doby všichni klienti připojují
pokud výše uvedené nefunguje, přejděte na /etc/mysql/my.cnf
(podle ubuntu) a zakomentujte STRICT_TRANS_TABLES
Také, pokud chcete trvale nastavit sql režim při spuštění serveru, zahrňte SET sql_mode=''
v my.cnf
na Linuxu nebo MacOS. Pro Windows to musí být provedeno v my.ini
soubor.
Poznámka
Přísný režim však není ve výchozím nastavení v MYSQL 5.6 povolen. Proto nevytváří chybu podle Dokumentace MYSQL 6 který říká
MySQL vám umožňuje uložit „nulovou“ hodnotu „0000-00-00“ jako „fiktivní datum“. To je v některých případech pohodlnější než použití hodnot NULL a využívá méně dat a indexového prostoru. Chcete-li zakázat '0000-00-00', povolte režim SQL NO_ZERO_DATE.
AKTUALIZACE
Pokud jde o chybu, jak řekl @Dylan-Su:
Nemyslím si, že to je chyba ve způsobu, jakým se MYSQL vyvíjel v průběhu času, kvůli kterému se některé věci mění na základě dalšího zlepšování produktu.
Mám však další související hlášení o chybě týkající se NOW()
funkce
Pole Datum a čas nepřijímá výchozí NOW()
Další užitečná poznámka [viz Automatická inicializace a aktualizace pro TIMESTAMP a DATETIME ]
Od MySQL 5.6.5 lze sloupce TIMESTAMP a DATETIME automaticky inicializovat a aktualizovat na aktuální datum a čas (tj. aktuální časové razítko). Před verzí 5.6.5 to platí pouze pro TIMESTAMP a maximálně pro jeden sloupec TIMESTAMP na tabulku. Následující poznámky nejprve popisují automatickou inicializaci a aktualizaci pro MySQL 5.6.5 a vyšší, poté rozdíly pro verze předcházející 5.6.5.
Aktualizace týkající se NO_ZERO_DATE
Od MySQL od 5.7.4 je tento režim zastaralý. U předchozí verze musíte zakomentovat příslušný řádek v konfiguračním souboru. Přečtěte si dokumentaci MySQL 5.7 dne NO_ZERO_DATE