"ERREUR 1067 (42000) : valeur par défaut non valide pour 'created_at'" expliquée
Lorsque vous tentez de modifier une table en ajoutant un nouveau colonne, vous pouvez rencontrer une erreur indiquant : « ERREUR 1067 (42000) : valeur par défaut non valide pour 'créé_à'." Cette erreur semble contre-intuitive puisque vous ne modifiez pas la colonne 'created_at' elle-même.
La cause profonde
Le problème provient des paramètres de configuration MySQL connus sous le nom de modes SQL. Plus précisément, les modes SQL "NO_ZERO_IN_DATE" et "NO_ZERO_DATE". Ces modes limitent les valeurs de date et d'horodatage par défaut pour inclure à la fois un composant de date et d'heure, interdisant les valeurs avec un composant d'heure de « 00:00:00 ».
Lorsque vous créez une nouvelle table, elle hérite des modes SQL. actif au moment de la création. Dans le cas où ces modes SQL sont activés, cela impacte les valeurs par défaut des colonnes d'horodatage comme 'created_at'. L'ajout d'une nouvelle colonne à une table avec ces modes SQL activés tente de remplacer la valeur par défaut existante pour 'created_at', ce qui n'est pas autorisé.
Résolution
Pour résoudre ce problème, vous pouvez identifier les modes SQL actifs en exécutant la commande :
show variables like 'sql_mode' ;
Si le "NO_ZERO_IN_DATE" et Les modes SQL "NO_ZERO_DATE" sont présents, vous pouvez les désactiver en définissant le mode SQL pour supprimer ces restrictions. Vous pouvez le faire globalement en tant qu'utilisateur root avec la commande :
set global sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Après avoir apporté les modifications nécessaires au mode SQL, vous devriez pouvoir ajouter la nouvelle colonne sans rencontrer l'erreur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!