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

Requêtes MySQL Discussion :

Pb de SELECT * WHERE le champ de caractere presque identique


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut Pb de SELECT * WHERE le champ de caractere presque identique
    Bonjour

    Je developpe une application a partir du visual C++ 6.0 et du wrapper mysql et easyPHP.

    Cette application recupere des codes formés de 18 caractères de la forme (200005000007123456) qui sont ma cle primaire declaré en VARCHAR auquel on ajoute une description de moins de 255 caractéres dans la table .
    Le programme dès qu'il recoit un code affiche le code et le descripteur si il existe dans la base ou insere le nouveau code avec un descripteur vierge sinon.


    Pour cela une requete avec un select est fait, mon probleme est que des qu'un nouveau code apparait avec un identifiant identique sur les 16 premiers caracteres et les 2 derniers differents, le select me renvoie que ce nouveau code existe deja.

    J'ai fait un essai avec mysql5.0, la l'erreur est differente, au premier passage il insere mes codes, au deuxieme le select me dit qu'il ne sont pas dans la base et essaye de faire un INSERT mais la j'ai un message d'erreur me disant que la cle existe deja.

    Y a t-il une limite de comparaison sur les chaines de caractéres lors des select?
    si oui peut t on l'etendre ?
    Y a t il un moyen de declarer autrement ces chaines de caracteres pour faire un comparaison sur les 18 ?

    Merci pour vos reponses

    Cordialement

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    un champ "varchar" n'est pas sensible à la casse donc si tu compares "ABC" et "abc" il te dira surement que c'est différent à la comparaison mais ensuite à l'insertion ça sera considéré comme égal et donc refusé
    essaye d'ajouter la propriété "BINARY" à ton champ

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Merci pour ta reponse

    Ajouter BINARY ne change rien.
    De toute facon ma comparaison ne ce fait que sur des chiffres et non sur des lettres.

    Merci

  4. #4
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je reformule ce que j'ai compris.
    L'insertion fonctionne si sur les seize premiers il n'y a aucun doublon dans la base. Par contre, si seulement le 17ème ou le 18ème caractère inséré est différent,a lors tu as une erreur, c'est bien cela ?

    Auquel cas, vérifie en premier la longueur de ta colonne, elle est peu-être à 16 . MySQL ne retourne pas d'erreur si tu insères 18 caractères dans une chaîne de 16 caractère. MySQL se contente de tronquer les données.

    Ensuite, regarde ta contrainte d'unicité et son index. Un index peut porter sur les x premiers caractères. N'as-tu pas fait une erreur ?

    N.B. : reproduis nous ton jeu d'essai. Tout est expliqué là : http://www.developpez.net/forums/showthread.php?t=944
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    Tu as en effet bien compris, mais ma colonne est definie avec 20 caracteres.
    D'ailleurs j'ai fait un essai en ecrivant les meme informations a l'envers c'est a dire que le code n'a pas de partie fixe au depart et a les meme fin, la je n'ai pas de probleme, il s'agit vraiment je pense du nombre de caractere comparer par ma le wrapper mysql++.

    Je ne sais pas comment eviter ce probleme par ce que les personne qui auront a acceder au donner seront a l'envers.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Alexandre T
    N.B. : reproduis nous ton jeu d'essai. Tout est expliqué là : http://www.developpez.net/forums/showthread.php?t=944
    ça m'interresserai aussi

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    Merci a tous, mon pb est que la requete sql doit avoir des ' ' entre la chaine de caractere, des que je depasse 16 caracteres, avec moins cela marche sans avec plus non

    Cordialement

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par Alexandre T
    N.B. : reproduis nous ton jeu d'essai. Tout est expliqué là : http://www.developpez.net/forums/showthread.php?t=944
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] SELECT / WHERE Champ multiples valeurs
    Par Antoine B dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/04/2013, 18h49
  2. Réponses: 2
    Dernier message: 13/02/2010, 15h25
  3. [SQL]select where deux des champs sont en doublons
    Par Eruil dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/07/2007, 15h58
  4. Réponses: 8
    Dernier message: 16/08/2006, 14h39
  5. Select * Where {}
    Par Thomad dans le forum Langage SQL
    Réponses: 14
    Dernier message: 16/10/2003, 21h27

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