Felet beror på sql-läget som kan vara strikt enligt senaste MYSQL 5.7-dokumentationen
MySQL Documentation 5.7 säger :
Strikt läge påverkar om servern tillåter '0000-00-00' som ett giltigt datum:Om strikt läge inte är aktiverat är '0000-00-00' tillåtet och inlägg ger ingen varning. Om strikt läge är aktiverat, '0000- 00-00' är inte tillåtet och inlägg ger ett fel, såvida inte IGNORE anges också. För INSERT IGNORE och UPDATE IGNORE är '0000-00-00' tillåtet och inlägg ger en varning.
För att kontrollera MYSQL-läget
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Inaktiverar STRICT_TRANS_TABLES-läget
Men för att tillåta formatet 0000-00-00 00:00:00
du måste inaktivera STRICT_TRANS_TABLES-läget i mysql-konfigurationsfilen eller genom kommando
På kommando
SET sql_mode = '';
eller
SET GLOBAL sql_mode = '';
Använder sökordet GLOBAL
kräver superpreviliges och det påverkar verksamheten som alla klienter ansluter från och med den tiden
om ovanstående inte fungerar går du till /etc/mysql/my.cnf
(enligt ubuntu) och kommentera STRICT_TRANS_TABLES
Om du vill ställa in sql-läget permanent vid serverstart, inkludera också SET sql_mode=''
i my.cnf
på Linux eller MacOS. För Windows måste detta göras i my.ini
fil.
Obs
Men strikt läge är inte aktiverat som standard i MYSQL 5.6. Därför ger det inte felet enligt MYSQL 6-dokumentation som säger
MySQL tillåter dig att lagra ett "noll"-värde på '0000-00-00' som ett "dummy-datum". Detta är i vissa fall bekvämare än att använda NULL-värden och använder mindre data och indexutrymme. För att inte tillåta '0000-00-00', aktivera SQL-läget NO_ZERO_DATE.
UPPDATERA
Angående felfrågan som sagt av @Dylan-Su:
Jag tror inte att detta är felet på det sätt som MYSQL har utvecklats över tiden, vilket gör att vissa saker ändras baserat på ytterligare förbättringar av produkten.
Men jag har en annan relaterad felrapport angående NOW()
funktion
Datetime-fältet accepterar inte standard NOW()
En annan användbar notering [se Automatisk initiering och uppdatering för TIMESTAMP och DATETIME ]
Från och med MySQL 5.6.5 kan TIMESTAMP och DATETIME-kolumnerna initieras automatiskt och uppdateras till aktuellt datum och tid (det vill säga den aktuella tidsstämpeln). Före 5.6.5 gäller detta endast för TIMESTAMP, och för högst en TIMESTAMP-kolumn per tabell. Följande anteckningar beskriver först automatisk initiering och uppdatering för MySQL 5.6.5 och senare, sedan skillnaderna för versioner som föregår 5.6.5.
Uppdatering angående NO_ZERO_DATE
Från och med MySQL från och med 5.7.4 är detta läge föråldrat. För tidigare version måste du kommentera ut respektive rad i inställningsfilen. Se MySQL 5.7-dokumentationen NO_ZERO_DATE