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

PHP & Base de données Discussion :

LIKE et casse de caractères [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut LIKE et casse de caractères
    Salut à tous. J'utilise une base de données MySql pour sauvegarder les utilisateurs de mon site internet. Lors de l'inscription d'un nouveau membre, j'aimerai vérifié que le pseudonyme qu'il veut utiliser n'existe pas déjà, donc je fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @mysql_query("SELECT nickname FROM account WHERE nickname LIKE '%". $nickname ."%'");
    $nickname contient la valeur retourné par le formulaire et par un htmlentities avec ENT_QUOTES. Lorsque j'entre comme pseudonyme Janitrix (compte qui existe déjà), il me trouve bien le compte existant. Mais lorsque je fait janitrix, il ne me trouve plus rien. Pourtant il est écrit dans la FAQ que like est insensible à la casse ! Avez-vous une idée de la raison de ce dysfonctionnement ? Merci !

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je te suggère de travailler directement en ligne de commande (ou avec phpMyAdmin) pour t'abstraire de ton formulaire et de tout les traitements que tu appliques dessus (htmlentities & co)

    Si tu executes cette requête, quel est le résultat ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'Janitrix' LIKE 'janitrix';

  3. #3
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Il me renvoie '1'. C'est bizarre. Cela voudrait dire qu'il a trouvé une entrée. Cela viendrait de mon formulaire ? Merci.

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Oula pas si vite !

    Maintenant testes sur ta table (toujours en ligne de commande) :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nickname FROM account WHERE nickname LIKE '%janitrix%'
    et
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nickname FROM account WHERE nickname LIKE '%Janitrix%'
    Est-ce que les résultats sont les mêmes ?

  5. #5
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nickname FROM account WHERE nickname LIKE '%janitrix%'
    Il n'a rien trouvé .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nickname FROM account WHERE nickname LIKE '%Janitrix%'
    Il a trouvé un enregistrement.
    Bon ça explique un peu pourquoi ma requête php ne trouve rien mais je comprend pas pourquoi, LIKE devrait être insensible a la casse non ? Merci.

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    En fait ton problème est lié aux collations.
    Je viens de faire un essai sur une table de test. En changeant de collation (passage de la valeur par defaut latin1_swedish_ci à utf8_bin) je n'ai plus d'insensibilité à la casse.

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Quel est le résultat de
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE account;

  8. #8
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Donc je dois mettre la collation 'latin1_swedish_ci' pour mon champs nickname ?
    C'est un bug ou une fonctionnalité ?
    [edit]Bien je viens de me rendre compte que le champ nickname n'avait pas d'interclassement défini ! Je vais essayer en mettant latin1_swedish_ci. Merci de l'aide !

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  10. #10
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Le problème est réglé ! En fait, mon champ nickname était de type Varbinary dans ma base données . Tout fonctionne maintenant. Merci en tout cas .

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/11/2010, 08h20
  2. Réponses: 0
    Dernier message: 26/08/2008, 16h12
  3. [Utilisation] Pb de casse des caractères?
    Par tominfo dans le forum Subversion
    Réponses: 2
    Dernier message: 22/01/2008, 18h06
  4. [FireBird] LIKE et casse
    Par Bruno@Chrysis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/06/2006, 10h35
  5. Quelques problèmes avec SQL SERVEUR (LIKE et caractères)
    Par poussinphp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/09/2005, 10h43

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