Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL] Recherche avec accent

Sujet résolu
    2 juillet 2010 à 22:33:23

    Bonjour,

    J'aurais aimé savoir s'il existe une requête SQL qui ne soit pas sensible aux accents.
    Par exemple si j'ai une table avec un champs 'nom' avec un enregistrement contenant le nom 'jérémie'
    Y a-t-il un moyen de récupérer cet enregistrement avec une requête ayant pour mot clé 'jeremie' ou 'jéremie' ?

    Merci d'avance pour vos réponses

    PS J'aimerais conserver les accents dans la BDD pour l'affichage par la suite des enregistrements ( je suppose que l'utilisateur Jérémie ne serait pas très content de se faire appeler jeremie)

    A+
    • Partager sur Facebook
    • Partager sur Twitter
      3 juillet 2010 à 1:50:32

      Oui, par contre pas sous MySQL à ma connaissance. Il faut que tu utilises une collation insensible aux caractères accentués.
      • Partager sur Facebook
      • Partager sur Twitter
        3 juillet 2010 à 19:52:13

        SELECT 'é' LIKE 'e';
        +---------------+
        | 'é' LIKE 'e' |
        +---------------+
        |             1 |
        +---------------+


        Avec une collation standard (utf8_general_ci) si tes encodages sont paramétrés correctement, il n'y a aucun problème, le LIKE fait ce que tu veux.
        • Partager sur Facebook
        • Partager sur Twitter
          4 juillet 2010 à 22:09:07

          Bonjour,
          Merci pour vos réponses.
          Je ne peux malheureusement pas changer de collation.
          Lord Casque Noir, Je ne saisis pas vraiment ton utilisation de LIKE. Peux tu donné comme exemple une requête complète pour sélectionner l'enregistrement Jérémy dans une table ?
          Merci d'avance

          a+
          • Partager sur Facebook
          • Partager sur Twitter
            5 juillet 2010 à 0:08:43

            Ben, 'é' LIKE 'e' vaut 1 (donc "vrai" vu que c'est un booléen) donc si tu recherches avec WHERE NOM LIKE 'jeremy' ty trouveras Jérémy, jérémy, jeremy, Jeremy, JÉRÉMY, etc.

            Tu as quoi comme charset et collation ?

            Ça donne quoi comme résultat si tu fais :

            select length('é');
            • Partager sur Facebook
            • Partager sur Twitter
              5 juillet 2010 à 13:51:53

              Le mot clé LIKE correspond à ce que tu utilise surement d'habitude: le =. Seulement le LIKE est spécifique au chaîne de caractères.
              • Partager sur Facebook
              • Partager sur Twitter
                5 juillet 2010 à 19:21:33

                Bonsoir,

                Juste pour information, on peut modifier le collate à la volée directement après le LIKE spécifiquement pour une requête.

                ++
                • Partager sur Facebook
                • Partager sur Twitter
                  6 juillet 2010 à 17:15:43

                  Merci pour vos réponses.

                  J'utilisais déjà l'opérateur LIKE dans des requête du type "WHERE Nom LIKE '%jeremy%'"
                  Je ne savais pas en revanche que 'é' LIKE 'e' était true, il faudra que je teste tout ça.

                  Actuellement je ne peux rien tester mais te tiens au courant du résultat de select length('é');

                  A+
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 juillet 2010 à 20:01:38

                    Si length('é') vaut 1 tout est bon (c'est 1 caractère), par contre si c'est 2 ça veut dire que ton encodage est foireux (car é en utf8 c'est 2 octets). C'est un diagnostic utile...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 juillet 2010 à 12:47:35

                      rebonjour,

                      effectivement je viens de tester, SELECT length('é') me renvoie 2...
                      Comment remédier à cela ?

                      merci
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 juillet 2010 à 12:57:35

                        Lis le tuto sur l'encodage et assure-toi que tout est bien en utf8 (mysql, les tables, les connexions, le mysql_set_charset() lors de la connexion à MySQL, les pages, les headers, etc).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 juillet 2010 à 11:55:52

                          Tu parles de ce tuto ? Le problème est que je ne travaille pas avec Mysql mais avec Sqlite. Visiblement, après recherche dans la doc de ce dernier, je n'ai comme choix d'encodage que UTF-8, UTF-16BE ou UTF-16LE... Je n'ai donc aucun moyen de faire ce que je souhaite c'est cela ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 juillet 2010 à 17:14:06

                            Ah, tu aurais dû le préciser ;)

                            http://www.sqlite.org/datatype3.html point 6.0
                            http://www.sqlite.org/lang_expr.html#like

                            Apparemment SQLITE ne gère pas l'unicode correctement, donc tu n'as pas de solution. Il va falloir que tu stockes séparément la chaîne sans accents dans une autre colonne.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 juillet 2010 à 22:13:38

                              D'accord c'est ce que je vais faire. Dommage qu'il n'y ai pas de meilleure solution...
                              Merci quand même à tous pour votre aide ;)

                              A+
                              • Partager sur Facebook
                              • Partager sur Twitter

                              [SQL] Recherche avec accent

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown