Voici une petite subtilité de MySQL. Les accents dans des champs texte peuvent être mal pris en compte dans les ORDER BY, suivant l’encodage utilisé.
Prenons l’exemple d’une table avec un champ id et un champ texte au format latin1_bin :
id texte
1 Crète
2 Croatie
3 Critère
Prenons maintenant une requête standard :
SELECT id, texte FROM matable ORDER BY texteCeci renverra Critère, puis Croatie, et enfin Crète, car latin1_bin effectue des comparaisons binaires et est donc sensible aux caractères accentués. Heureusement, MySQL fournit une parade avec COLLATE, qui permet de convertir dans le champ dans l’encodage de son choix, on peut donc dans notre cas utiliser latin1_swedish_ci qui reconnait correctement les accents (un é est considéré comme équivalent à un e).
La requête donne donc :
SELECT id, texte FROM matable ORDER BY texte COLLATE latin1_swedish_ci