Magazine Internet

Encodage et tri sur du texte accentué avec MySQL

Publié le 01 avril 2008 par Dave Lizotte

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

Retour à La Une de Logo Paperblog

A propos de l’auteur


Dave Lizotte 57 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog

Magazine