De fout is vanwege de sql-modus, die strikte modus kan zijn volgens de laatste MYSQL 5.7-documentatie
Strikte modus beïnvloedt of de server '0000-00-00' als een geldige datum toestaat:Als de strikte modus niet is ingeschakeld, is '0000-00-00' toegestaan en geven invoegingen geen waarschuwing. Als de strikte modus is ingeschakeld, wordt '0000- 00-00' is niet toegestaan en invoegingen geven een fout, tenzij ook IGNORE wordt gegeven. Voor INSERT IGNORE en UPDATE IGNORE is '0000-00-00' toegestaan en invoegingen geven een waarschuwing.
MYSQL-modus controleren
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
STRICT_TRANS_TABLES-modus uitschakelen
Echter om het formaat 0000-00-00 00:00:00
. toe te staan je moet de STRICT_TRANS_TABLES-modus uitschakelen in het mysql-configuratiebestand of met een opdracht
Op bevel
SET sql_mode = '';
of
SET GLOBAL sql_mode = '';
Het trefwoord GLOBAL
. gebruiken vereist super previliges en het beïnvloedt de operaties die alle clients vanaf dat moment verbinden
als bovenstaande niet werkt, ga dan naar /etc/mysql/my.cnf
(volgens ubuntu) en reageer STRICT_TRANS_TABLES
Als u de sql-modus permanent wilt instellen bij het opstarten van de server, voeg dan SET sql_mode=''
toe in my.cnf
op Linux of MacOS. Voor Windows moet dit worden gedaan in my.ini
bestand.
Opmerking
De strikte modus is echter niet standaard ingeschakeld in MYSQL 5.6. Daarom produceert het niet de fout volgens MYSQL 6-documentatie die zegt
Met MySQL kunt u een "nul"-waarde van '0000-00-00' opslaan als een "dummy-datum". Dit is in sommige gevallen handiger dan het gebruik van NULL-waarden en gebruikt minder gegevens en indexruimte. Om '0000-00-00' niet toe te staan, schakelt u de NO_ZERO_DATE SQL-modus in.
UPDATE
Wat betreft de bugkwestie zoals gezegd door @Dylan-Su:
Ik denk niet dat dit de bug is, het is de manier waarop MYSQL in de loop van de tijd is geëvolueerd, waardoor sommige dingen zijn veranderd op basis van verdere verbetering van het product.
Ik heb echter nog een ander gerelateerd bugrapport met betrekking tot de NOW()
functie
Datetime-veld accepteert geen standaard NU()
Nog een nuttige opmerking [zie Automatische initialisatie en update voor TIMESTAMP en DATETIME ]
Vanaf MySQL 5.6.5 kunnen de kolommen TIMESTAMP en DATETIME automatisch worden geïnitialiseerd en bijgewerkt naar de huidige datum en tijd (dat wil zeggen, de huidige tijdstempel). Vóór 5.6.5 geldt dit alleen voor TIMESTAMP en voor maximaal één TIMESTAMP-kolom per tabel. De volgende opmerkingen beschrijven eerst de automatische initialisatie en update voor MySQL 5.6.5 en hoger, daarna de verschillen voor versies vóór 5.6.5.
Update betreffende NO_ZERO_DATE
Vanaf MySQL vanaf 5.7.4 is deze modus verouderd. Voor de vorige versie moet u commentaar geven op de respectieve regel in het configuratiebestand. Raadpleeg MySQL 5.7-documentatie op NO_ZERO_DATE