Maison > Questions et réponses > le corps du texte
P粉3916779212023-08-23 15:36:57
J'ai également eu ce problème lorsque j'ai essayé de convertir une colonne en auto_increment, l'une des lignes avait une valeur de 0. Une alternative consiste à définir :
SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';
Pour mettre en place la séance.
Cela changera la colonne en un auto_increment avec zéro ID.
Zéro n'est pas idéal et je ne recommande pas de l'utiliser dans les colonnes auto_increment. Malheureusement, cela fait partie de l'ensemble de données hérité, je ne peux donc pas le modifier pour l'instant.
Il est préférable d'effacer les paramètres (et autres paramètres) par la suite :
SET SESSION sql_mode='';
Bien qu'il soit effacé à la fermeture de la session client en cours.
Tous les détails sur le paramètre 'NO_AUTO_VALUE_ON_ZERO' ici.
P粉1460805562023-08-23 00:06:11
Cela se produit si la table contient un enregistrement existant avec un identifiant de 0 (ou un nombre négatif). La mise à jour de tous les enregistrements existants pour utiliser des valeurs positives permettra de définir auto_increment sur cette colonne.
Edit : Certaines personnes ont demandé comment 0 apparaissait. Pour clarifier, le manuel de référence MySQL indique : "Pour les types numériques, la valeur par défaut est 0, mais pour les types entiers ou à virgule flottante avec l'attribut AUTO_INCREMENT, la valeur par défaut est la valeur suivante dans la séquence." avant d'activer auto_increment dans Lors de l'exécution d'une insertion sur une table sans fournir de valeur pour une colonne numérique, la valeur par défaut de 0 est utilisée lors de l'insertion. Plus de détails peuvent être trouvés sur https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html.