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 :

Recherche Regexp avec accents


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut Recherche Regexp avec accents
    Bonjour,

    J'effectue une recherche avec REGEXP, et je tombe sur la problématique des accents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM article WHERE ( article.titre REGEXP "[[:<:]]première[[:>:]]" )
    me sort bien un article dont le titre contient "Première"

    Pour palier aux problèmes des accents, j'utilise une fonction PHP qui convertit toutes les voyelles en classes [] contenant toutes les lettres possibles.
    Ce me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM article WHERE ( article.titre REGEXP "[[:<:]]premi[eèéêë]re[[:>:]]" )
    Et là... ça ne marche pas.
    Je n'ai que les "Premiere" sans accents qui apparaissent.

    Je ne sais pas si cela vient d'un problème de réglage de ma base, mon champs titre :
    titre varchar(255) utf8_general_ci

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Effectivement, cela vient de l'utf8 :

    Citation Envoyé par Doc MySQL

    Warning

    The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.
    cf http://dev.mysql.com/doc/refman/5.0/...perator_regexp

    Si tu ne veux pas changer le jeu de caractères de ta colonne, un contournement comme celui-ci devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM article 
    WHERE CONVERT(article.titre USING latin1) REGEXP '[[:<:]]premi[eèéêë]re[[:>:]]'
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Effectivement, cela vient de l'utf8 :



    cf http://dev.mysql.com/doc/refman/5.0/...perator_regexp

    Si tu ne veux pas changer le jeu de caractères de ta colonne, un contournement comme celui-ci devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM article 
    WHERE CONVERT(article.titre USING latin1) REGEXP '[[:<:]]premi[eèéêë]re[[:>:]]'
    Merci, ça fonctionne parfaitement

    Dans la continuité de ce problème, j'ai dans le champs titre un certain nombre d'entrées où les accents sont eux représentés en html ( &eacute; etc... ). Est ce qu'il y a une fonction MySQL dans le même genre que CONVERT() pour les convertir en entités normales ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Non. ça existe en PHP, tu devrais t'en servir pour corriger les titres dans ta base...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Non. ça existe en PHP, tu devrais t'en servir pour corriger les titres dans ta base...
    Ok, je vois également que ça n'existe pas

    Je vais traiter tout ça en PHP. Merci encore !

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

Discussions similaires

  1. Recherche insensible aux accents avec REGEXP
    Par khasyt dans le forum Requêtes
    Réponses: 7
    Dernier message: 10/08/2009, 03h17
  2. Moteur vérity - recherche avec accents
    Par biker084 dans le forum Coldfusion
    Réponses: 0
    Dernier message: 24/04/2009, 12h02
  3. recherche SQL avec accent
    Par y_marky dans le forum ASP
    Réponses: 7
    Dernier message: 28/03/2008, 21h08
  4. [VS] rechercher/remplacer avec des regexp
    Par v1nce dans le forum Visual Studio
    Réponses: 4
    Dernier message: 03/07/2007, 14h58
  5. [MySQL] Moteur de recherche avec accents
    Par NiX31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 12h27

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