MySQL, utf8 et ordre de tri avec initiales accentuées
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:
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:
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:
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:
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:
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 :D ) ?
Merci d'avance