Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1612 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Order by sur caractères spéciaux

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Order by sur caractères spéciaux

n°2373825
sltpaulo
Posté le 13-01-2021 à 15:46:51  profilanswer
 

Bonjour et bonne année!
 
Soucis d'ordering sur une base de données MySQL engine MyIsam
 
Problème : ordering non fonctionnelle sur des caractères spéciaux.
Exemple : table "users" 5 entrées (champ 'nom')

  • LØKKEGAARD
  • CSEH
  • ŠIMEČKA
  • BRUNET
  • RIES


La requete suivante (

Code :
  1. Select nom from users order by nom asc

) va me donner :

  • ŠIMEČKA
  • CSEH
  • BRUNET
  • LØKKEGAARD
  • RIES


Or ŠIMEČKA devrait se trouver à la fin.
(Autres lettres possible : ÝĶĄŅĻĚŻĒŮŹȘĽỶĪŠŽÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝÞßþČŞĆŁĂȚŇŃŪĖĎŐŘĘĀŚ)
Est-ce que quelqu'un a une solution a ça? (charset DB : utf8 )
 
Paul.

mood
Publicité
Posté le 13-01-2021 à 15:46:51  profilanswer
 

n°2373832
pluj
Posté le 13-01-2021 à 16:56:31  profilanswer
 

Bonjour,
 
c'est l'interclassement de ta colonne qui détermine comment ses données sont ordonnées. Le tout est d'utiliser le plus adéquat en fonction de la langue (c'est quoi comme langue d'ailleurs ?).
 
EDIT : c'est un mélange de langue ? (danois + slovaque + ...) Si oui, pas dit que la collation Unicode par défaut (que tu utilises probablement déjà) corresponde à ce que tu veuilles :/


Message édité par pluj le 13-01-2021 à 17:04:26
n°2373865
sltpaulo
Posté le 14-01-2021 à 10:40:45  profilanswer
 

Salut pluj,
 
Concernant les langues : toutes les langues d'Europe, donc du bulgare, du russe, du gaelique, grec, français etc...
Je fais egalement un collate en utf8mb4_general_ci unicode, etc, mais j'ai pas vraiment le choix, dû à la diversité des utilisateurs, pour éviter les problèmes d'encodages....
Pour le moment mis à part dupliquer la colonne par script et avoir une conversion de toutes les lettres en alphabet latin, je vois pas trop d'autre possibilités  => problème système pas très robuste si j'oublie des caractère, l'ajout de trigger m'embête un peu également donc...
Je suis ouvert à toute piste de réflexion au cas ou.
 
En tout cas, merci d'avoir pris le temps de répondre.

n°2373900
pluj
Posté le 14-01-2021 à 19:34:24  profilanswer
 

Salut,
 
à moins d'écrire ton propre interclassement, ça ne va pas être possible je pense car une collation (ou interclassement) correspond à une langue or tes données sont associées à plusieurs langues. (ie : impossible de contenter tout le monde)
 
Tu ne pourrais pas faire un ORDER BY via un interclassement temporaire qui te semblerait le mieux correspondre à l'utilisateur courant dans ce cas ? (ORDER BY nom COLLATE nom de l'interclassement ?)
 
Une transliteration (classe Tranlisterator de l'extension intl), il faut voir, ça a tout de même ses limites.


Message édité par pluj le 14-01-2021 à 19:36:45
n°2374209
rufo
Pas me confondre avec Lycos!
Posté le 21-01-2021 à 14:18:57  profilanswer
 

Regarde si par trigger tu peux pas générer automatiquement le contenu de la colonne supplémentaire. Perso, je vois pas d'autre solution que l'ajout d'une colonne.
Ou alors, tu crées une procédure/fonction dans Mysql qui prend en entrée la chaîne à convertir et te donne en sortie la version convertie comme tu veux et tu fais le order by là dessus.
Ex : ORDER BY MA_FONC(champ)
ou SELECT champ, MA_FONC(champ) AS Tri FROM.... ORDER BY Tri
 
Edit : bien entendu, ça marche si y'a pas trop de données. Si y'en a beaucoup, faudra passer par la solution de la colonne supplémentaire.


Message édité par rufo le 21-01-2021 à 14:20:20

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Order by sur caractères spéciaux

 

Sujets relatifs
MySql indisponible ce matinSauvegarde de bases MySQL
[PHP/MySQL] PDO - bindValue ça bind pas[MySQL] MAJ d'une table avec trigger et conditions
[MySQL] Table obèseInstallation MySQL
php - MySql - VariableCompter le nombre de caractères en C
MYSQL : update et select en une seule requêteMySQL
Plus de sujets relatifs à : [MySQL] Order by sur caractères spéciaux


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR