IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Erreur bizarre "Duplicate entry" avec un int(11)


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut Erreur bizarre "Duplicate entry" avec un int(11)
    Bonjour,
    Je voudrais vous montrer une erreur assez étrange.

    J'ai une base de données contenant près d'un million d'enregistrements. Ma clé est un INT(11) auto-incrémenté.

    Depuis peu, j'ai un message "Duplicate entry '909289' for key 1" lorsque j'insers un enregistrement. Cette valeur n'existe pas, la plus grande étant bien 909288.

    Après quelques recherches, je teste en modifiant la taille de INT à... 30 (déjà bizarre que ce soit autorisé, puisque le maximum est à mon sens 11...).

    Et là, plus d'erreur lors de l'insertion. Il crée bien un enregistrement avec comme valeur 909289, et depuis de nombreux enregistrements ont été créés, sans problème. Jusqu'à quand ? Telle est ma question...

    Je souhaiterais connaitre votre avis là-dessus. Quel est l'effet d'un INT(30) ? A quoi pourrait être dûe cette erreur alors que la valeur était inférieure au million pour champs INT(11) ?

    Merci d'avance de votre aide,
    Cédric

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Peux-tu nous donner le code de création de ta table, ainsi que les requêtes d'insertion ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut
    Pour différentes raisons, je ne préfère pas donner ces informations.

    Ce que je peux dire c'est que ma table avait pour clé un champs id de type INT(11) et que pour tester une nouvelle fois l'INSERT, j'ai utilisé le formulaire classique d'insertion de phpMyAdmin, afin d'éviter toute erreur dans l'écriture de la requête.

    L'erreur donnée par SQL porte bien uniquement sur ce champs id. Et c'est en changeant simplement la taille de id (INT(11) => INT(30)) que cela a fonctionné.

    J'ai par ailleurs créé une table test similaire avec un INT(11) et j'ai esssayé d'insérer des données plus élevées que le million, ça ne posait aucun problème. Maintenant, je n'ai pas testé avec un million d'enregistrements où les id vont de 1 au million justement...

    Enfin, c'est vraiment bizarre.
    Mais bon une question très générale que j'aimerais bien comprendre serait : quelle est la signification de INT(30) ? Elle doit être différente de INT(11) puisque c'est uniquement cette modification qui a résolu mon problème.

    Merci d'avance de votre aide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Citation Envoyé par Cedricweb Voir le message
    Mais bon une question très générale que j'aimerais bien comprendre serait : quelle est la signification de INT(30) ? Elle doit être différente de INT(11) puisque c'est uniquement cette modification qui a résolu mon problème.
    En-dehors de l'utilisation de ZEROFILL, je ne vois pas du tout

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 129
    Par défaut
    A propos du INT(11) :
    Le X dans INT(X) donne juste le nombre de chiffres utilisés par défaut à l'affichage d'un résultat de requête, dans le client mysql par exemple. Si le nombre est plus petit, un padding est ajouté pour avoir X caractères affichés, et si le nombre est plus grand, le X n'est pas pris en compte.
    Ce qui est important, c'est qu'il n'y a aucun rapport entre ce X et la capacité de stockage : INT, INT(6) et INT(11), c'est pareil. La différence de capacité de stockage se fait seulement entre un TINYINT, un INT ...

    A propos de ton erreur 'Duplicate entry' :
    Il est possible que, dans ta requête INSERT, tu aies précisé la valeur de l'auto_increment : si cette valeur existait déjà, alors tu as une erreur.
    Il est aussi possible que l'index sur ton champ auto_increment ait été corrompu, provoquant ton erreur. Ton changement de INT(11) en INT(30) est un ALTER TABLE qui reconstruit la table : ton index est lui aussi reconstruit et l'auto_increment fonctionne de nouveau.
    Si tu es dans le 2è cas, tu peux refaire un ALTER TABLE pour revenir en INT(11) et tout devrait fonctionner normalement.

    Stéphane

Discussions similaires

  1. Message d'erreur de Mysql "Duplicate entry '0' for key 1"
    Par Alexandrebox dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/02/2010, 16h54
  2. Erreur bizarre avec le module DBI
    Par Jim_Nastiq dans le forum SGBD
    Réponses: 7
    Dernier message: 12/04/2006, 17h28
  3. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo