L'erreur est due au mode sql qui peut être le mode strict selon la dernière documentation MYSQL 5.7
MySQL Documentation 5.7 dit :
Le mode strict affecte si le serveur autorise «0000-00-00» comme date valide: Si le mode strict n'est pas activé, «0000-00-00» est autorisé et les insertions ne produisent aucun avertissement. Si le mode strict est activé, «0000-00-00» n'est pas autorisé et les insertions produisent une erreur, sauf si IGNORE est également indiqué. Pour INSERT IGNORE et UPDATE IGNORE, «0000-00-00» est autorisé et les insertions produisent un avertissement.
Pour vérifier le mode MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Désactivation du mode STRICT_TRANS_TABLES
Cependant pour autoriser le format 0000-00-00 00:00:00
vous devez désactiver le mode STRICT_TRANS_TABLES dans le fichier de configuration mysql ou par commande
Par commande
SET sql_mode = '';
ou
SET GLOBAL sql_mode = '';
L'utilisation du mot-clé GLOBAL
nécessite des précisions et affecte les opérations auxquelles tous les clients se connectent à partir de ce moment
si ci-dessus ne fonctionne pas, allez à /etc/mysql/my.cnf
(selon ubuntu) et commentezSTRICT_TRANS_TABLES
En outre, si vous voulez régler définitivement le mode sql au démarrage du serveur puis inclure SET sql_mode=''
dans my.cnf
sous Linux ou MacOS. Pour Windows, cela doit être fait dans un my.ini
fichier.
Remarque
Cependant, le mode strict n'est pas activé par défaut dans MYSQL 5.6. Par conséquent, il ne produit pas l'erreur selon la documentation MYSQL 6 qui dit
MySQL vous permet de stocker une valeur «zéro» de «0000-00-00» en tant que «date factice». C'est dans certains cas plus pratique que d'utiliser des valeurs NULL et utilise moins de données et d'espace d'index. Pour interdire «0000-00-00», activez le mode SQL NO_ZERO_DATE.
METTRE À JOUR
En ce qui concerne le problème du bug, comme l'a dit @ Dylan-Su:
Je ne pense pas que ce soit le bogue de la façon dont MYSQL a évolué au fil du temps, en raison duquel certaines choses sont modifiées en fonction de l'amélioration du produit.
Cependant, j'ai un autre rapport de bogue concernant la NOW()
fonction
Le champ Datetime n'accepte pas la valeur par défaut NOW ()
Une autre note utile [voir Initialisation et mise à jour automatiques pour TIMESTAMP et DATETIME ]
Depuis MySQL 5.6.5, les colonnes TIMESTAMP et DATETIME peuvent être automatiquement initialisées et mises à jour à la date et à l'heure actuelles (c'est-à-dire l'horodatage actuel). Avant la version 5.6.5, cela n'est vrai que pour TIMESTAMP et pour au plus une colonne TIMESTAMP par table. Les notes suivantes décrivent d'abord l'initialisation et la mise à jour automatiques pour MySQL 5.6.5 et versions ultérieures, puis les différences pour les versions antérieures à la 5.6.5.
Mise à jour concernant NO_ZERO_DATE
Depuis MySQL à partir de la version 5.7.4, ce mode est obsolète. Pour la version précédente, vous devez commenter la ligne respective dans le fichier de configuration. Reportez-vous à la documentation MySQL 5.7 le NO_ZERO_DATE
NULL
sert.