Drôle d'ordre alphabétique

Mammouth du PHP | 2937 Messages

14 déc. 2006, 17:07

Salut à tous!

Dans une requête, j'utilise un ORDER BY.

Or, le résultat trie le champ concerné par la commande ORDER BY dans un drôle d'ordre alphabétique, puisque les caractères spéciaux (comme  ou É) passent avant la lettre A. :shock: Pour info, la base de données est en UTF-8.

Y a-t-il moyen d'ordonner selon l'ordre alphabétique naturel (É noyé dans E et non placé avant A)?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 déc. 2006, 17:27

Quelques remarques importantes : premièrement, É ou Ä ne sont pas "spéciaux", ce sont des lettres comme les autres (et c'est d'ailleurs pour cela que tu t'attends à les voir quelque part avec les E et A). D'ailleurs, ي et д aussi sont des lettres.

Ensuite, il faut savoir qu'il n'existe pas de classement "naturel". Selon les pays, certains caractères se retrouvent classés différemment. Pire, dans certains pays il existe des différences entre le classement du dictionnaire et celui du bottin. Tout ça pour dire qu'il faut faire attention à choisir la bonne collation pour le champs en question. Essaie utf8_general_ci, sinon essaie utf8_unicode_ci et rapporte-nous le résultat ;)

Mammouth du PHP | 2937 Messages

14 déc. 2006, 18:03

Salut!

En utf8_general_ci, le résultat est de ce genre:

-Aperçu
-Âge
-Échelle numérique
-Champ libre

En utf8_bin:
-Aperçu
-Champ libre
-Âge
-Échelle numérique

Dans toutes les autres collations:

-Âge
-Échelle numérique
-Aperçu
-Champ libre

Pas de quoi en sortir satisfait. :?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 déc. 2006, 18:09

Chez moi, utf8_general_ci me donne
  • Âge
  • Aperçu
  • Champ libre
  • Échelle numérique
Il y a donc un problème ailleurs dans ton script, probablement au moment de l'insertion. Assure-toi que tu reçois bien de l'UTF-8 (toutes tes pages doivent avoir comme en-tête Content-type: text/html; charset=utf-8) et que ton serveur est correctement configuré. Par exemple, mon my.ini comporte ceci:

Code : Tout sélectionner

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8
Au pire, exécute cette requête en début de script

Code : Tout sélectionner

SET NAMES 'utf8' COLLATE 'utf8_general_ci'

ViPHP
ViPHP | 1961 Messages

14 déc. 2006, 18:34

Bonjour,

J'obtiens le même résultat que Hubert Roksor avec la collation utf8_general_ci ou avec utf8_general_cs
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 2937 Messages

14 déc. 2006, 18:36

Assure-toi que tu reçois bien de l'UTF-8 (toutes tes pages doivent avoir comme en-tête Content-type: text/html; charset=utf-8)
Il n'y a pas de problème là-dessus.
et que ton serveur est correctement configuré. Par exemple, mon my.ini comporte ceci:

Code : Tout sélectionner

[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8
Le my.ini d'EasyPHP ne dit rien de ça. :oops: (Qu'en est-il chez WAMP?)
Au pire, exécute cette requête en début de script

Code : Tout sélectionner

SET NAMES 'utf8' COLLATE 'utf8_general_ci'
Ça n'arrange rien: pire, ça affiche les caractères bizarres d'un UTF-8 mal décodé.

ViPHP
ViPHP | 1961 Messages

14 déc. 2006, 18:39

Re,
Les tests que j'ai fait sont sous Linux et FF.

Dans ton navigateur tu as quoi comme encodage des cractères une fois ta page affichée ?
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 2937 Messages

14 déc. 2006, 18:49

Firefox (sous Windows) me dit que la page est en UTF-8.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

14 déc. 2006, 19:26

Il n'y a pas de problème là-dessus.
Vérifie également que tu n'as pas de balise <meta> qui dirait le contraire.
Le my.ini d'EasyPHP ne dit rien de ça
:arrow: ajoute-les.
Ça n'arrange rien: pire, ça affiche les caractères bizarres d'un UTF-8 mal décodé.
Quoi comme caractères bizarres ? si ce sont des ou des ? alors le contenu du champs n'est probablement pas de l'UTF-8.