Encodage et tri sur du texte accentué avec MySQL

Bases de données Aucun commentaire »

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 texte

Ceci 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
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in