Salut à tous !

J'ai une base mySQL dont les tables ont toutes "DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci" et chaque champ texte a un "collate utf8_unicode_ci".

Le problème réside dans l'ordre de tri lorsque la valeur d'un champ a un caractère accentué comme initiale.

(je sais, les problèmes d'ordre de tri avec utf8, ce n'est pas nouveau, mais mes recherches n'ont pas abouti :-( )

Soit une table listant des langues (dont l'écossais), je fais une requête pour obtenir les langues :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
select langues from matable order by langues
Avec cette requête, « écossais » se trouve en début de résultat, avant "a.. ".


Ah mais il suffit de préciser un collate !

Mettons "collate utf8_unicode_ci" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
select langues from matable order by langues collate utf8_unicode_ci
Ça me donne le même résultat que la première requête, "écossais" se trouve en début de résultat, avant "a.. ".


J'ai essayé les collate trouvés pour l'utf8 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
// place "écossais" entre les mots commençant par "a" 
// et ceux commençant par "b"
select langues from matable order by langues collate utf8_general_ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
// placent "écossais" en début de résultat, comme ma requête sans collate,
// ou avec collate utf8_unicode_ci
select langues from matable order by langues collate utf8_roman_ci
select langues from matable order by langues collate utf8_swedish_ci
select langues from matable order by langues collate utf8_turkish_ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
// place "écossais" en dernière position
select langues from matable order by langues collate utf8_bin
Bref, aucun collate qui ordonnerait "écossais" avec les "e".

Quelqu'un aurait-il une idée ( autre que de refaire un tri dans le programme ) ?

Merci d'avance