Requête Mysql sans tenir compte des accents

Requête Mysql sans tenir compte des accents - SQL/NoSQL - Programmation

Marsh Posté le 06-04-2009 à 13:27:14    

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
Reply

Marsh Posté le 06-04-2009 à 13:27:14   

Reply

Marsh Posté le 06-04-2009 à 13:35:46    

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
Reply

Marsh Posté le 06-04-2009 à 14:11:45    

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

Reply

Marsh Posté le 06-04-2009 à 17:08:55    

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,

Reply

Marsh Posté le 07-04-2009 à 09:08:35    

ç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
Reply

Marsh Posté le 07-04-2009 à 13:49:33    

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,

Reply

Marsh Posté le 07-04-2009 à 15:11:21    

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
Reply

Marsh Posté le 29-08-2009 à 14:00:22    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed