Requête Mysql sans tenir compte des accents - SQL/NoSQL - Programmation
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 :
|
ps: c'est quoi encore la balise pour colorer le sql?
Edit: ha oué c'était le [/code] que je foirais
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 :
|
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,
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 !
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,
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 :
|
Normalement, ça devrait être insensible à la casse et aux accents.
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