L'erreur est due au mode sql qui peut être en mode strict selon la dernière documentation MYSQL 5.7
Le mode strict détermine 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 génèrent 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 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 = '';
Utilisation du mot-clé GLOBAL
nécessite des super privilèges et affecte les opérations que tous les clients se connectent à partir de ce moment
si ci-dessus ne fonctionne pas, allez dans /etc/mysql/my.cnf
(selon ubuntu) et commentez STRICT_TRANS_TABLES
De plus, si vous souhaitez définir de manière permanente le mode sql au démarrage du serveur, incluez SET sql_mode=''
dans my.cnf
sous Linux ou MacOS. Pour Windows, cela doit être fait dans 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 Documentation MYSQL 6 qui dit
MySQL vous permet de stocker une valeur "zéro" de "0000-00-00" comme "date fictive". Ceci 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.
MISE À JOUR
Concernant la question du bogue comme l'a dit @Dylan-Su :
Je ne pense pas que ce soit le bogue, c'est 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 lié concernant le NOW()
fonction
Le champ Datetime n'accepte pas la valeur par défaut NOW()
Une autre remarque 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 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 plus, puis les différences pour les versions antérieures à 5.6.5.
Mise à jour concernant NO_ZERO_DATE
À partir de MySQL à partir de 5.7.4, ce mode est obsolète. Pour la version précédente, vous devez commenter la ligne correspondante dans le fichier de configuration. Reportez-vous à la documentation MySQL 5.7 sur NO_ZERO_DATE