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 :
Avec cette requête, « écossais » se trouve en début de résultat, avant "a.. ".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select langues from matable order by langues
Ah mais il suffit de préciser un collate !
Mettons "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.. ".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select langues from matable order by langues collate utf8_unicode_ci
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_ciBref, aucun collate qui ordonnerait "écossais" avec les "e".
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
Quelqu'un aurait-il une idée ( autre que de refaire un tri dans le programme ) ?
Merci d'avance
Partager