Maison > Article > base de données > Exemple de partage de problèmes causés par l'horodatage MySQL 8.0
Cet article vous apporte quelques problèmes connexes qui peuvent survenir concernant la valeur par défaut des champs dans MySQL. J'espère qu'il vous sera utile.
Aujourd'hui, l'entreprise a signalé un problème. Le champ modifier_time ne peut pas être nul et le champ de commentaires de l'entreprise est défini sur une valeur par défaut. Le message d'erreur spécifique à l'entreprise est le suivant :
De. le message d'erreur, Il se peut que le champ modifier_time n'ait pas de valeur par défaut définie ou que la valeur par défaut soit mal définie. Ensuite, vérifiez la structure de la table :
CREATE TABLE `jj_xxxx` ( .... `create_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00' , `update_user` int DEFAULT NULL, `modify_time` timestamp NOT NULL DEFAULT '1999-12-31 23:00:00', .... PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4893 DEFAULT CHARSET=utf8 COMMENT='xxxxx'
D'après la structure de la table, il ne semble y avoir aucun problème avec la valeur par défaut. valeur définie. Vérifiez le réglage du paramètre sql_mode. Il semble qu'aucun problème n'ait été trouvé ;
Le personnel commercial a signalé que la table en ligne est également comme celle-ci, mais c'est normal en ligne, et nous devons maintenant migrer cette entreprise vers une autre. Environnements. De l'entreprise à la base de données, il y a un autre ensemble d'environnements ;
Soudain, j'ai pris en compte la différence dans les versions de base de données ; le nouvel environnement de migration est MySQL version 8.0 et l'environnement en ligne est la version 5.7. le paramètre explicit_defaults_for_timestamp dans les deux versions est différent ;
Raison :
variable système explicit_defaults_for_timestamp Détermine comment le serveur MySQL gère les valeurs par défaut et les valeurs NULL dans la colonne d'horodatage.
Cette variable a été introduite à partir de la version 5.6.6 de MySQL. Elle est divisée en niveau global et niveau de session. Elle peut être mise à jour dynamiquement. La valeur par défaut est OFF.
Dans la version 8.0, la valeur par défaut a été modifiée en on
explicit_defaults_for_timestamp=OFF, ce qui signifie utiliser le format par défaut de l'horodatage ; quel est le format par défaut du type d'horodatage ?1. Contrairement aux autres types de champs, ce champ n'est pas nul par défaut. Et la définition de null par défaut n'est pas autorisée.
2 Le champ d'horodatage dans la première colonne, si la valeur par défaut ou l'attribut de mise à jour n'est pas forcé. spécifié, il sera défini par défaut sur DEFAULT CURRENT_TIMESTAMP et ON UPDATE CURRENT_TIMESTAMP.
3. Si le champ d'horodatage dans la colonne autre que la première n'est pas obligé de spécifier une valeur par défaut, DEFAULT '0000-00-00 00:00:00'
4. L'insertion d'une valeur nulle dans cette colonne sera automatiquement convertie. à la valeur par défaut ;
explicit_defaults_for_timestamp=ON, puis désactivez les fonctionnalités de l'horodatage par défaut :1 Si not null n'est pas explicitement spécifié, la valeur par défaut est null ; null au lieu de CURRENT_TIMESTAMP ;
3. Si l'attribut non nul est spécifié et que la valeur de ce champ n'est pas spécifiée dans la méthode inset, une erreur sera signalée en mode sql_mode strict. Insérez '0000-00-00 00:00:00' sous sql_mode non strict ;
Vous devez examiner attentivement les scénarios suivants :1. L'horodatage n'est pas nul par défaut CURRENT_TIMESTAMP, ce qui se produira lorsque explicit_defaults_for_timestamp passe de 0. à 1 Quel est l’impact commercial ? Une telle conversion, si le champ d'horodatage a une valeur par défaut, entraînera l'échec de l'instruction d'insertion d'origine avec la valeur du champ d'horodatage, affectant l'entreprise
2. Convertissez la datetime par défaut en horodatage par défaut CURRENT_TIMESTAMP, ce qui causera également Quel est l’impact commercial ?
Effectuer une telle conversion de champ convertira toutes les valeurs nulles d'origine du champ en CURRENT_TIMESTAMP S'il y a beaucoup de données historiques, une telle conversion consommera beaucoup de ressources. Dans le même temps, il est également nécessaire de prendre en compte l’impact des changements de valeur sur l’entreprise.
Apprentissage recommandé :
Tutoriel vidéo mysqlCe 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!