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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête Mysql sans tenir compte des accents

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête Mysql sans tenir compte des accents

n°1870035
zezette
"Allez hop, au revoir"
Posté le 06-04-2009 à 13:27:14  profilanswer
 

Bonsoir à tous,
 
J'ai une table UTF8 dans une base de données. Elle contient des noms :
 
Ex :
 
Armand
Émile
Bernard
 
Si je fais un select sur %a% ou sur %A%, j'ai Armand et Bernard (car c'est un table _ci (case insensitive)) mais si je fais une recherche sur %em%, %Em% ou %ém%, je n'ai rien. Si je fais une recherche sur %Ém%, là, j'ai Émile...  
 
Comment faire pour que ce soit bien case insensitive même avec les caractères accentués ? Comment faire pour ne pas du tout tenir compte des accents (et donc que toutes les recherches ci-dessus aboutissent à Émile) ?
 
Merci :)
 
--edit--
 
Je viens de remarquer en plus que si on passe ça en php, émile a une longueur de 6 ! (et emile une longueur de 5)... C'est assez problematique... et si j'édite ma base de données avec phpmyadmin, on voit é pour é (soit 2 caractères)


Message édité par zezette le 16-04-2009 à 08:41:31

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
mood
Publicité
Posté le 06-04-2009 à 13:27:14  profilanswer
 

n°1870040
casimimir
Posté le 06-04-2009 à 13:35:46  profilanswer
 

faudra trouver la correspondance en mysql mais en oracle je ferai déja un lower pour mettre mon critère de recherche et mon champ en minuscule, et un translate pour faire transformer mes éèêë en e, style ca, et faire pareil pour les o, u, etc
 
Le coté gênant c'est que tu es sur de taper a coté des index dans tous les cas
 

Code :
  1. WHERE translate(lower(mon_champ),'éèêë','eeee') = translate(lower('%Ém%'),'éèêë','eeee')


 
ps: c'est quoi encore la balise pour colorer le sql?
 
 
Edit: ha oué c'était le [/code] que je foirais


Message édité par casimimir le 06-04-2009 à 14:18:52
n°1870065
Profil sup​primé
Posté le 06-04-2009 à 14:11:45  answer
 

[code=sql][/code]
:jap:

n°1870204
xav1611
Posté le 06-04-2009 à 17:08:55  profilanswer
 

Salut,
 
Pour résoudre ce problème, j'utilise la fonction COLLATE, par exemple la requête :  
 

Code :
  1. SELECT *
  2. FROM CLIENT
  3. WHERE Email COLLATE latin1_general_cs
  4. <> LOWER(Email)
  5. AND Email COLLATE latin1_general_cs
  6. <> UPPER(Email)


 
me permet de sortir tous les CLIENTS pour lesquels l'Email stocké est différent de l'Email en majuscule ou en minuscule (par exemple test@TEST.fr est différent de test@test.fr)
Il faut ensuite trouver le classement qui te permet de ne pas tenir compte des accents, je pense qu'un COLLATE latin1_general_cs_ai par exemple permet de définir que tu veux utiliser le classement latin1_general en Case Sensitive et en Accent_Insensitive.
 
Bon courage,

n°1870394
zezette
&#034;Allez hop, au revoir&#034;
Posté le 07-04-2009 à 09:08:35  profilanswer
 

ça existe pas les interclassements ..._ai
 
Et en plus je pense qu'il n'interprete pas les é ou É comme étant des caractères accentués. Quand je vais dans phpmyadmin, on voit é pour é et É pour É... pourtant si je fais un select du contenu et que je l'affiche sur une page on voit bien é et É... et donc la fonction lower ne met pas en minuscule un É... puisque c'est un É... et la fonction replace (équivalent, je pense, au translate de Oracle) ne remplace pas le é per un e...
 
Quel bordel ces codages !


Message édité par zezette le 07-04-2009 à 09:10:13

---------------
"Par moment j'me d'mande si chui pas con" G. de Suresnes
n°1870542
xav1611
Posté le 07-04-2009 à 13:49:33  profilanswer
 

Salut,
 
En effet, sur mySql ça n'a pas l'air d'exister... Je t'ai donné cette réponse parce que sur SQL Server il existe pas mal d'autres possibilités : http://msdn.microsoft.com/en-us/library/ms143515.aspx
 
Apparemment, sur ce lien : http://www.ab-d.fr/date/2008-06-21/ il est proposé un classement qui serait Accent Insensitive par défaut, je ne peux pas tester, mais ils comparent cinéma et cinema, ça ressemble à ton cas...
 
Bon courage,

n°1870601
rufo
Pas me confondre avec Lycos!
Posté le 07-04-2009 à 15:11:21  profilanswer
 

je pense que tu peux essayer, sur la même méthode que xav1611, un truc du genre :

Code :
  1. SELECT * FROM Table Where Champ COLLATE latin1_swedish_ci LIKE "%ChaîneRecherchée%"


 
Normalement, ça devrait être insensible à la casse et aux accents.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1919560
ceyquem
E falso sequitur quodlibet
Posté le 29-08-2009 à 14:00:22  profilanswer
 

La ruse suédoise marche bien et m'aide beaucoup :)
Merci !!


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

  Requête Mysql sans tenir compte des accents

 

Sujets relatifs
[mysql] limit + not exists[PHP] Caracteres Chinois + mysql + utf8 + PEAR DB = ?@?#$
[Bunisess objects] Pb avec une requêteMySQL - connection PHP/MySQL - problème de socket ?
[MYSQL JDBC] et des problèmes d'accents à devenir dingue !!Requête très simple
requete register avec jain-sipAffichage requête Count - Département
j n arrive pas à créer une connexion java vers base de données mysql 
Plus de sujets relatifs à : Requête Mysql sans tenir compte des accents


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