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

Outils MySQL Discussion :

Recherche accentuée et accentuee


Sujet :

Outils MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 16
    Points
    16
    Par défaut [Résolu] Recherche accentuée et accentuee
    Bonjour,

    J'ai une table qui contient des champs en utf8_swedish_ci.
    Prenons par exemple 4 enregristrements dont le champ "test1" contient :
    évènement
    évenement
    evènement
    evenement

    Lorsque je les rentre via phpmyadmin, ils sont stockés tels quels et lorsque je recherche evenement j'ai les 4 enregistrements.
    Mais quand il sont stockés telsquels c'est qu'ils ne sont pas en utf8, donc j'ai refais le test en les inserant en utf8 ce qui donne un truc du genre :
    ÄîvÂ"nement
    Äîvenement
    evÂ"nement
    evenement

    Et là quand je fais la recherche sur evenement, je n'ai plus qu'un seul résultat.

    Voici les différentes requetes que j'ai utilisé :

    INSERT INTO accents VALUES ('', CONVERT( _latin1 'évènement' USING utf8));
    INSERT INTO accents VALUES ('', CONVERT( _latin1 'évenement' USING utf8));
    INSERT INTO accents VALUES ('', CONVERT( _latin1 'evènement' USING utf8));
    INSERT INTO accents VALUES ('', CONVERT( _latin1 'evenement' USING utf8));

    Et pour le select :

    SELECT * FROM accents WHERE test1 LIKE CONVERT( _latin1 'evenement' USING utf8) COLLATE utf8_swedish_ci);

    SI quelqu'un a une idée...

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Mon interprétation de tes requêtes est inverse : tu as déclaré en latin1 (avec l'introduction _latin1) des textes que ton client (phpMyAdmin ?) avait en fait rédigés en utf8. Du coup, tu bousille tous tes accents...

    Je ne saurais trop te recommander l'article cité en signature...
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Oui je m'en suis rendu compte après en fait.

    Le truc, c'est qu'à ma boite on travaille avec Xaraya, un CMF bien poussé. Et les données sont stockées en UTF8, dans une table latin_swedish_ci.
    J'ai essayé toutes les conversions possibles, mais rien n'y fait : je n'arrive pas à "laisser" le contenu en UTF8 tout en mettant la table en UTF8 : "ÄîvÂ"nement" reste "ÄîvÂ"nement", alors qu'il devrait se rafficher correctement .
    J'ai essayé de passer par un blob avant de repasser en Mediumtext utf8 comme expliqué sur un site (commentcamarche je crois), mais ça n'a rien changé.

    J'ai enregistré ton doc, je le lirais ce midi merci.


    [EDIT] J'ai lu ton doc, il est bien foutu. Mais jen 'ai pas réussi à trouver un solution à mon problème...
    Je viens de faire un test assez étrange : dans l'une des tables en latin1, j'ai deux champs : champ1 et champ2 qui étaient à l'origine tous deux en latin1.
    J'ai changé uniquement le second en le mettant en utf8.
    Mais lorsque j'ajoute les même données via Xaraya, les deux champs ont exactement la même valeur : Ä@vâ§nement tous les deux. Si Xaraya envoie les données au format UTF8, que ce soit écrit ainsi dans le champ latin c'est normal, mais pourquoi ça l'est aussi dans le champ en utf8 ???

    Je suis perdu là...

    [REDIT] En faisant un UNHEX(HEX(champTableLatin)) lors de l'insert dans une table en UTF8, j'arrive bien à récupérer les accents. Donc il n'y a plus qu'à trouver une solution pour l'ajout via Xaraya : pourquoi les accents restent ils mal codés même si le champ est en utf8 ?

    [REREDIT] Il semblerait que MySQL n'accepte que les données au format "standard" en entrée et les réencode ensuite dans la jeu de caractère du champ ? Celà expliquerait pourquoi lorsque Xaraya envoie ¨Ä@vâ§nement" et que le champ est en latin1, ça reste Ä@vâ§nement et si le champ est en uft8, ça reste aussi Ä@vâ§nement puisque MySQL réencoderai à nouveau les lettres Ä et @ en les interprétant comme du latin1 ?

    Y a t'il une config qui permet à MySQL de décoder l'encodage d'arrivée ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    En gros, tu as compris le truc : MySQL convertit tout automatiquement, ce qui fait que en temps normal tout se passe comme sur des roulettes même entre encodages différents, et mais que si à un moment ou un autre il y a un grain de sable, il est très dur de s'en débarasser... La seule exception à cette conversion automatique est effectivement la conversion en BLOB ou depuis un BLOB.

    Il n'y a pas de "détection" possible. C'est le client qui indique à MySQL avec quel jeu de caractère il envoie et il affiche les données. SHOW VARIABLES LIKE 'char%' te permet de voir quel jeu de caractère est déclaré au niveau du client, puis à celui de la connexion.

    Regarde déjà l'en-tête de tes pages Xaraya, afin de vérifier le jeu de caractère déclaré, mais je suppose que ça doit être de l'UTF8.

    Ton problème peut venir d'une fonction PHP comme htmlentities() ou html_entity_decode() à qui il faut préciser le jeu de caractères, sous peine de voir tout étiquetté à tort en latin1...
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Merci,

    Je verrais comment modifier ça. Maintenant que je connais la source du problème ça devrait être plus simple . Le seul hic c'est que xaraya est un monstre ^^ Et si je modifie ça va mettre du temps, chose que les clients ne nous accordent pas forcément lol.

    Je tag en "résolu" Merci encore pour tes infos.

    D.

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

Discussions similaires

  1. [AC-2003] Critère recherche sur lettre accentuée
    Par willytito dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/02/2010, 15h05
  2. Réponses: 3
    Dernier message: 11/10/2008, 13h32
  3. [MySQL] Recherche insensible aux accentuations
    Par toony dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 11/07/2008, 09h04
  4. Recherche contenant des lettres accentuées (Locate)
    Par meji dans le forum C++Builder
    Réponses: 1
    Dernier message: 22/01/2008, 22h27
  5. [SELECT] recherche de majuscules accentuées
    Par Huntress dans le forum Langage SQL
    Réponses: 17
    Dernier message: 11/09/2005, 16h39

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