Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/11/2007, 09h34   #1
Invité régulier
 
Inscription : janvier 2004
Messages : 24
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 24
Points : 8
Points : 8
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 :
1
2
3
4
ain
ete
été
brest
Ces données sont bien en UTF-8. Dans PHPMyADMIN, elles apparaissent ainsi :

Code :
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 :
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 :
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.
Dimitri01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 09h59   #2
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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 :
INSERT INTO maTable (monChamp) VALUE (_utf8'mavaleur');
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 10h12   #3
Invité régulier
 
Inscription : janvier 2004
Messages : 24
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 24
Points : 8
Points : 8
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 ?
Dimitri01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 12h18   #4
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
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/
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h12.


 
 
 
 
Partenaires

Hébergement Web