L'errore è dovuto alla modalità sql che può essere modalità rigorosa secondo l'ultima documentazione di MySQL 5.7
La documentazione MySQL 5.7 dice :
La modalità rigorosa influisce sul fatto che il server consenta '0000-00-00' come data valida:se la modalità rigorosa non è abilitata, '0000-00-00' è consentito e gli inserimenti non producono alcun avviso. Se la modalità rigorosa è abilitata, '0000- 00-00' non è consentito e gli inserti producono un errore, a meno che non venga indicato anche IGNORE. Per INSERT IGNORE e UPDATE IGNORE, '0000-00-00' è consentito e gli inserti 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
devi disabilitare la modalità STRICT_TRANS_TABLES nel file di configurazione mysql o tramite comando
Per comando
SET sql_mode = '';
o
SET GLOBAL sql_mode = '';
Utilizzando la parola chiave GLOBAL
richiede super privilegi 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 commenta STRICT_TRANS_TABLES
Inoltre, se desideri impostare in modo permanente la modalità sql all'avvio del server, includi SET sql_mode=''
in my.cnf
su 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 di 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 nell'indice. Per non consentire '0000-00-00', abilitare la modalità SQL NO_ZERO_DATE.
AGGIORNAMENTO
Per quanto riguarda la questione del 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 all'ulteriore miglioramento del prodotto.
Tuttavia ho un'altra segnalazione di bug relativa a NOW()
funzione
Il campo Data/ora non accetta il valore predefinito ORA()
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 e aggiornate automaticamente alla data e all'ora correnti (ovvero il timestamp corrente). Prima della 5.6.5, questo valeva solo per TIMESTAMP e per al massimo una colonna TIMESTAMP per tabella. Le note seguenti descrivono prima l'inizializzazione e l'aggiornamento automatici per MySQL 5.6.5 e versioni successive, quindi le differenze per le versioni precedenti alla 5.6.5.
Aggiornamento relativo a NO_ZERO_DATE
A partire da MySQL a partire dalla 5.7.4 questa modalità è deprecata. Per la versione precedente è necessario commentare la rispettiva riga nel file di configurazione. Fare riferimento alla documentazione MySQL 5.7 su NO_ZERO_DATE