Bonjour,
Ma requête MySQL utilise ORDER BY mais affiche les résultats en plaçant les caractères accentués après les caractères de base (exemple é après z ou Z).
Est-ce qu'il est possible de les trier dans l'ordre naturel?
Bonjour,
Ma requête MySQL utilise ORDER BY mais affiche les résultats en plaçant les caractères accentués après les caractères de base (exemple é après z ou Z).
Est-ce qu'il est possible de les trier dans l'ordre naturel?
Cela dépend de la collation de ta colonne.
Pour commencer tu peux vérifier l'état actuel :
La doc :select all TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_SET_NAME, COLLATION_NAME from information_schema.COLUMNS where TABLE_SCHEMA = 'ta_base' and TABLE_NAME = 'ta_table';
https://dev.mysql.com/doc/refman/8.0/en/charset.html
https://dev.mysql.com/doc/refman/8.0...t-collate.html
Sans avoir à changer la collation du serveur, de la base de données, de la table ou de la colonne, on peut la modifier grâce au mot clef COLLATE de la clause ORDER BY.
Voir le manuel de référence ICI.
Après essai, je constate que certaines collation sont incompatibles avec celle de départ (utf8_general_ci). Même en modifiant le choix de départ, je ne sais pas quelle collation choisir.
Tu peux faire cette requête pour vérifier les couples collations/jeux compatibles et dispos sur ton système :
Les principaux aujourd'hui sont :select all * from information_schema.COLLATIONS where CHARACTER_SET_NAME regexp 'utf8' order by COLLATION_NAME asc;
ai = insensible aux accentsCOLLATION_NAME CHARACTER_SET_NAME utf8mb4_0900_ai_ci utf8mb4 utf8mb4_0900_as_ci utf8mb4 utf8mb4_0900_as_cs utf8mb4
as = sensible aux accents
ci = insensible à la casse
cs = sensible à la casse
Perso j'utilise utf8mb4 // utf8mb4_0900_ai_ci (c'est la config par défaut des configs MySQL actuelles).
Si besoin ponctuellement de sensibilité je fais ORDER BY ma_colonne COLLATE utf8mb4_0900_as_cs ASC.
Attention, les possibilités dépendent de ton SGBDR (MySQL ? MariaDB ?) et de sa version (MySQL 8 ?)
Merci @Escatefigue et @Séb. pour ces explications mais je viens de m'apercevoir que ma table est correctement triée. Mais le rendu avec DataTable (jQuery) est retrié dans le mauvais ordre. Il faut que je cherche de ce côté, s'il est possible de faire quelque chose.
Je considère ma question comme résolue.
Partager