IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

Erreur de classement avec un utf8mb4_general_ci


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 524
    Par défaut Erreur de classement avec un utf8mb4_general_ci
    bonjour,

    j'ai des données nom+prenom que j'ordonne par nom,prenom dans une table en utf8mb4_general_ci et chaque champs var255 est bien aussi en utf8mb4_general_ci .

    étrangement, dans un group_concat/CONCAT , la clause ORDER ne tient pas compte du type utf8mb4_general_ci de la table.
    est-ce un bug mysql ou bien le casse insensible ne concerne que le ORDER BY du SELECT et pas le ORDER de GROUP_CONCAT/CONCAT ?

    Très étrange...

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 365
    Par défaut
    Salut clavier12AZQSWX.

    Peux tu donner un exemple ?
    --> table, contenu, select
    histoire de reproduire cela chez nous.
    Dans quelle version es tu ? En Mysql ? En MariaDB ?

  3. #3
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 1 009
    Par défaut
    Bonsoir,
    Citation Envoyé par clavier12AZQSWX Voir le message
    j'ai des données nom+prenom que j'ordonne par nom,prenom dans une table en utf8mb4_general_ci et chaque champs var255 est bien aussi en utf8mb4_general_ci .
    Si je comprends bien ceci se traduit par un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nom+prenom as ...
    FROM ...
    ...
    ORDER BY nom, prenom
    ;

    Citation Envoyé par clavier12AZQSWX Voir le message
    étrangement, dans un group_concat/CONCAT , la clause ORDER ne tient pas compte du type utf8mb4_general_ci de la table.
    Et là si je comprends, l'ordre de tri de la requête à suivre n'est pas le même que celui de la requête précédente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nom+prenom as ...
    FROM ...
    ...
    ORDER BY nom+prenom
    ;
    Est-ce là l'objet de votre propos ?

  4. #4
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 524
    Par défaut
    bonjour,

    c'est difficile à dire car j'ai essayé de simplifier le cas pour montrer mon prob sur le forum.
    en gros voici une partie de ma requête ou de mon expression qui arrive dans le SELECT d'une requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CONCAT(UPPER(etu_nom),' ',etu_prenom,IF(etu_mode like '%d%', ' (distanciel)', ''),'SEP02',forma_acro) END ORDER BY etu_nom,etu_prenom) AS Test

    La table où ya la source de la requête est en InnoDB utf8mb4_general_ci
    Le sgbd est en 5.7.42-log (select version()

    Je suis pas sûr mais il semblerait que ma concaténation alternative avec '' (quote vide) renvoie un type différent, du coup il faudrait peut-être que je fasse une collation forcée même si mes champs sont en utf8mb4_general_ci . ça pourrait venir de là?

    faire une concat avec '' ou avec "" peut-il changer le type de l'expression finale ?

  5. #5
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 1 009
    Par défaut
    Citation Envoyé par clavier12AZQSWX Voir le message
    c'est difficile à dire car j'ai essayé de simplifier le cas pour montrer mon prob sur le forum.
    en gros voici une partie de ma requête ou de mon expression qui arrive dans le SELECT d'une requête :
    Pour le coup je ne sais pas replacer le bout de code fourni dans une requête SQL
    Vu que tu as dit "innodb" et "5.7", j'en ai conclu que tu utilises MySQL version 5.7 (dont le support est fini depuis 2023...)
    J'ai cru un instant que c'était une partie d'une fonction de fenêtrage ; mais il semblerait que la version MySQL 5.7 n'en disposait pas.



    Le fait que dans le code fourni il y ait un "AS" indique qu'on soit bel et bien dans une colonne calculée, colonne formulée dans une clause SELECT
    Je peux comprendre qu'il n'est pas simple/évident de copier du code et de le mettre comme ça dans un forum.
    Cependant il faut a minima fournir :
    * le squelette SQL
    * l’intégralité de la formule de la colonne
    * les alias des sources - d'autant plus important s'il y a des sous requêtes

    Le tout complété par ce que tu as vs ce que tu estimes devoir être le résultat
    Le savoir est une nourriture qui exige des efforts.

Discussions similaires

  1. Requête pour faire un classement avec droit à l'erreur
    Par triaguae dans le forum Requêtes
    Réponses: 0
    Dernier message: 07/12/2012, 12h44
  2. Erreur ORA-12514 avec database link
    Par gafreu dans le forum Administration
    Réponses: 20
    Dernier message: 09/09/2004, 12h53
  3. Erreur sur IIS avec des cripts ASP
    Par Alin dans le forum ASP
    Réponses: 7
    Dernier message: 22/06/2004, 15h15
  4. erreur tcp/ip avec jdbc
    Par champion dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 03/04/2004, 15h32
  5. Erreur de sgmentation avec malloc
    Par simonm dans le forum C
    Réponses: 5
    Dernier message: 27/02/2003, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo