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

Requêtes MySQL Discussion :

Effectuer une recherche "case insensitive" mais "accent sensitive"


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut Effectuer une recherche "case insensitive" mais "accent sensitive"
    Bonjour à tous !

    Comme indiqué dans le titre je cherche à réaliser une recherche (LIKE) sur des champs en étant à la fois "case insensitive" mais "accent sensitive".

    Actuellement j'ai testé d'utiliser les codages suivants :
    jeu de caractères : latin1
    collation : latin1_general_cs (les 2 sont sensitives) ou latin1_general_ci (les 2 sont insensitives)

    Je n'arrive donc pas à obtenir mes 2 contraintes simultanément.

    Je n'ai pas à réussi trouver si d'autres codages pourraient faire l'affaire ou s'il y a une astuce pour s'en sortir, je me remets donc à votre expérience

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si j'en crois SQLPro, ce n'est pas possible avec MySQL, c'est une de ces grosses lacunes.
    D'après la doc MySQL, c'est soit ci, soit cs, soit bin ; ce dernier étant sensible aux accents et à la casse.

    A moins que ce soit possible avec un WHERE double avec l'instruction COLLATE ? Je n'ai jamais essayé.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    A moins que ce soit possible avec un WHERE double avec l'instruction COLLATE ? Je n'ai jamais essayé.
    le problème c'est que dans ce cas, il me semble que, j'obtiendrai plus de résultats qu'escompté. De plus le résultat du requête WHERE avec COLLATE x_cs me parait être inclus dans celui de la même requête WHERE avec COLLATE x_ci, non ?

    Au final mon problème réside dans le fait, qu'avec le jeu de caractères que j'utilise, case sensitive = accent sensitive. Si quelqu'un connait un jeu de caractères (avec la collation adéquate) qui ne pose pas ce problème, je suis preneur
    Toute requête, même farfelue, menant au même résultat sera évidemment aussi bienvenue.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Mon idée allait plutôt dans le sens d'un WHERE COLLATE x_cs OR COLLATE x_ci mais encore une fois je n'ai jamais été confronté à ce problème alors je ne sais pas si c'est possible.
    Donne ta requête, on verra ce qu'on peut imaginer de concret
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Merci pour ton aide.

    Je n'ai pas de requête en particulier, mais tu peux imaginer ce genre de choses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT mot FROM ma_table WHERE mot LIKE 'toto%';
    Il faudrait que j'ai les mêmes résultats que j'ai toto ou Toto, mais pas si j'ai tôto. Est-ce plus clair ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Quelques tests...

    Dans la table, j'ai une ligne où name = 'Philippe Leménager' (avec capitales, minuscules, accent). L'interclassement de la table est utf8_unicode_ci

    Recherche stricte avec accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
    FROM users
    WHERE name = 'Philippe Leménager'
    => Philippe Leménager

    Recherche sans accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
    FROM users
    WHERE name = 'Philippe Lemenager'
    => Philippe Leménager

    Recherche en mettant la colonne en minuscules et avec accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
     FROM users
     WHERE LOWER(name) = 'Philippe Leménager'
    => Philippe Leménager

    Recherche en mettant la colonne en minuscules et sans accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
      FROM users
      WHERE LOWER(name) = 'Philippe Lemenager'
    => Philippe Leménager

    Recherche en mettant la colonne en capitales et avec accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
      FROM users
      WHERE UPPER(name) = 'Philippe Leménager'
    => Philippe Leménager

    Recherche en mettant la colonne en capitales et sans accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
       FROM users
       WHERE LOWER(name) = 'Philippe Lemenager'
    => Philippe Leménager


    Recherche avec COLLATE avec accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
     FROM users
     WHERE name = 'Philippe Lemenager' COLLATE utf8_bin
    => Philippe Leménager

    Recherche avec COLLATE sans accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
    FROM users
    WHERE name = 'Philippe Lemenager' COLLATE utf8_bin
    => MySQL n'a retourné aucun enregistrement.

    Recherche avec COLLATE avec accent et mise en capitales de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
      FROM users
      WHERE UPPER(name) = 'Philippe Lemenager' COLLATE utf8_bin
    => MySQL n'a retourné aucun enregistrement.

    Recherche avec COLLATE sans accent et mise en capitales de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
     FROM users
     WHERE UPPER(name) = 'Philippe Lemenager' COLLATE utf8_bin
    => MySQL n'a retourné aucun enregistrement.

    Recherche avec COLLATE avec accent et mise en minuscules de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
       FROM users
       WHERE LOWER(name) = 'Philippe Lemenager' COLLATE utf8_bin
    => MySQL n'a retourné aucun enregistrement.

    Recherche avec COLLATE sans accent et mise en minuscules de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT name
      FROM users
      WHERE LOWER(name) = 'Philippe Lemenager' COLLATE utf8_bin
    => MySQL n'a retourné aucun enregistrement.

    Fais des tests de ce genre avec tes données, tu devrais pouvoir arriver à obtenir ce que tu cherches.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-Excel] Effectuer une recherche dans une liste view
    Par Miles Raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2006, 17h21
  2. Comment effectuer une recherche dans une listBox?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 19/05/2006, 16h15
  3. liste deroulante pour effectuer une recherche
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/04/2006, 09h27
  4. Effectuer une recherche avec jEdit
    Par lyon72 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 3
    Dernier message: 04/04/2006, 18h44
  5. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06

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