L'errore è dovuto alla modalità sql che può essere modalità rigorosa secondo l'ultima documentazione di MYSQL 5.7
La documentazione di MySQL 5.7 dice :
La modalità rigorosa determina se il server consente o meno "0000-00-00" come data valida: se la modalità rigorosa non è abilitata, è consentita "0000-00-00" e gli inserti non producono alcun avviso. Se la modalità rigorosa è abilitata, "0000-00-00" non è consentito e gli inserimenti producono un errore, a meno che non venga fornito anche IGNORE. Per INSERT IGNORE e UPDATE IGNORE, è consentito "0000-00-00" e gli inserimenti producono un avviso.
Per controllare la modalità MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Disattivazione della modalità STRICT_TRANS_TABLES
Tuttavia per consentire il formato 0000-00-00 00:00:00
è necessario disabilitare la modalità STRICT_TRANS_TABLES nel file di configurazione mysql o tramite comando
A comando
SET sql_mode = '';
o
SET GLOBAL sql_mode = '';
L'utilizzo della parola chiave GLOBAL
richiede superpreciliges e influisce sulle operazioni che tutti i client si connettono da quel momento in poi
se sopra non funziona vai su /etc/mysql/my.cnf
(come per ubuntu) e commentaSTRICT_TRANS_TABLES
Inoltre, se desideri impostare in modo permanente la modalità sql all'avvio del server, includi SET sql_mode=''
in my.cnf
Linux o MacOS. Per Windows questo deve essere fatto in my.ini
file.
Nota
Tuttavia, la modalità rigorosa non è abilitata per impostazione predefinita in MYSQL 5.6. Quindi non produce l'errore come da documentazione MYSQL 6 che dice
MySQL ti consente di memorizzare un valore "zero" di "0000-00-00" come "data fittizia". Questo in alcuni casi è più conveniente rispetto all'utilizzo di valori NULL e utilizza meno dati e spazio dell'indice. Per non consentire "0000-00-00", abilitare la modalità SQL NO_ZERO_DATE.
AGGIORNARE
Per quanto riguarda la questione dei bug, come detto da @ Dylan-Su:
Non credo che questo sia il bug nel modo in cui MYSQL si è evoluto nel tempo a causa del quale alcune cose sono cambiate in base a ulteriori miglioramenti del prodotto.
Tuttavia ho un'altra segnalazione di bug relativa alla NOW()
funzione
Il campo data / ora non accetta il valore predefinito NOW ()
Un'altra nota utile [vedi Inizializzazione e aggiornamento automatici per TIMESTAMP e DATETIME ]
A partire da MySQL 5.6.5, le colonne TIMESTAMP e DATETIME possono essere inizializzate automaticamente e aggiornate alla data e all'ora correnti (ovvero, il timestamp corrente). Prima della 5.6.5, questo è vero solo per TIMESTAMP e per al massimo una colonna TIMESTAMP per tabella. Le seguenti note descrivono prima l'inizializzazione e l'aggiornamento automatici per MySQL 5.6.5 e versioni successive, quindi le differenze per le versioni precedenti 5.6.5.
Aggiornamento relativo a NO_ZERO_DATE
A partire dalla versione 5.7.4 di MySQL, questa modalità è deprecata. Per la versione precedente è necessario commentare la rispettiva riga nel file di configurazione. Fare riferimento alla documentazione di MySQL 5.7 su NO_ZERO_DATE
NULL
serve.