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 :

Tri (ORDER) erroné en UTF-8


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Par défaut Tri (ORDER) erroné en UTF-8
    Bonjour,

    Note : j'ai bien lu ce post, mais n'y ai pas trouvé d'explication. Je précise que j'ai par contre la même version de MySQL, que j'utilise également Wamp. Que l'ordre de tri est erroné dans phpMyAdmin, dans MySQL Query et via PHP lorsque j'affiche le résultat dans une page web.

    Sous MySQL 5.0.27, j'ai une table dont le charset est UTF8 et la collation utf8_general_ci.

    Dans ma table, j'ai les données suivantes dans une colonne "nom" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ain
    ete
    été
    brest
    Ces données sont bien en UTF-8. Dans PHPMyADMIN, elles apparaissent ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ain
    ete
    été
    brest
    Mon problème est le suivant : si j'exécute la requête suivante :

    SELECT nom FROM matable ORDER BY nom

    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ain
    été
    brest
    ete
    En effet, le é étant encodé en UTF-8 en é, le mot été apparait après ain. Tout se passe donc comme si le tri se faisait en latin, et non en UTF-8.

    J'aimerais évidemment que le résultat de la requête retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ain
    brest
    été
    ete
    J'ai essayé de forcer la collation directement dans la requête, mais ça n'a rien changé.

    Je précise que le charset utf8 et la colation sont indiqués au niveau de la colonne nom de ma table, ainsi que par défaut dans ma base.

    D'ou peut bien provenir le problème ?

    Merci par avance,
    Dimitri.

  2. #2
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Il y a été enregistré comment cette chaine été ? Même si tu le force en sortie ça va rien changé. Cela dépend avec quel encodage il a été enregistré.
    Tente un truc dans ce genre là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO maTable (monChamp) VALUE (_utf8'mavaleur');

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 24
    Par défaut
    Bonjour, et merci de t'intéresser à mon problème, qui me prend la tête depuis hier soir...

    Le contenu de ma table avait été effectué via un import sql depuis phpMyAdmin, le fichier sql étant encodé en utf-8.

    J'ai exécuté la requête que tu m'a indiquée, en insérant été.

    Et bien le problème, c'est que été ne semble pas avoir été inséré comme étant de l'UTF-8, puisque dans phpMyAdmin, il apparait comme été (alors qu'il devrait apparaitre comme été, non ?

    J'ai exécuté la requête dans MySQL Query Browser, et c'est la même chose.

    Du coup, quand dans un simple script php je veux extraire et afficher en utf-8 les données de ma table, j'obtiens ?t? au lieu de été...

    As-tu une explication ?

  4. #4
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Citation Envoyé par Dimitri01 Voir le message
    Bonjour, et merci de t'intéresser à mon problème, qui me prend la tête depuis hier soir...

    Le contenu de ma table avait été effectué via un import sql depuis phpMyAdmin, le fichier sql étant encodé en utf-8.

    J'ai exécuté la requête que tu m'a indiquée, en insérant été.

    Et bien le problème, c'est que été ne semble pas avoir été inséré comme étant de l'UTF-8, puisque dans phpMyAdmin, il apparait comme été (alors qu'il devrait apparaitre comme été, non ?

    J'ai exécuté la requête dans MySQL Query Browser, et c'est la même chose.

    Du coup, quand dans un simple script php je veux extraire et afficher en utf-8 les données de ma table, j'obtiens ?t? au lieu de été...

    As-tu une explication ?
    Non pas forcément. Il y a une difference entte le format enregistré et le format en sortie. Lorsqu'il fait un ORDER BY c'est sur le format enregistré.
    Pour plus de renseignement regarde cette article.
    http://antoun.developpez.com/mysql5/jeux-collations/

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/06/2010, 17h04
  2. [Tri] order by Oracle vs sort Unix
    Par raj dans le forum SQL
    Réponses: 1
    Dernier message: 06/07/2007, 15h55
  3. double tri ORDER BY
    Par Pepito dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2005, 01h44
  4. [ORDER BY]tri sur le dernier caractère d'un champ
    Par Tan dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/05/2004, 14h39
  5. Réponses: 9
    Dernier message: 18/03/2004, 12h20

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