Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 07/06/2011 10:01:45
- plouf le chien
- Membre
pg 9.0.4 - recherche accent incensitives sans modules externes ?
Hello
quelqu'un peut-il me dire comment fonctionnent maintenant, avec postgresql 9.0.4, les recherche non sensibles aux accents a partir d'une base utf-8 ?
de la version postgresql 8.2 à 8.3, j'utilisais : lower(to_ascii(convert(VARIABLE'UTF8','LATIN9'),'LATIN9')),
a partir de la 8.3: lower(to_ascii(convert(VARIABLE::bytea,'UTF8'::name,'LATIN9'::name)::text,'LATIN9'::name))
là, ça fait 2 heures que je tâtonne avec des convert/convert_to/convert_from sur la v9 et je commence a péter un câble .. ;-) des idées avec les fonctions de base de postgresql ?
PLF.
Hors ligne
#2 07/06/2011 10:03:20
- Marc Cousin
- Membre
Re : pg 9.0.4 - recherche accent incensitives sans modules externes ?
Pourquoi tous ces convert ? lower/upper marchent, tant qu'on a un encodage correct pour la base.
SELECT upper ('répéter');
upper
---------
RÉPÉTER
Marc.
Hors ligne
#3 07/06/2011 10:30:56
- plouf le chien
- Membre
Re : pg 9.0.4 - recherche accent incensitives sans modules externes ?
ok j'ai sauté une étape:
je voudrais faire une recherche (classique) où une recherche sur "GRÉGORY" va me remonter les fiches contenant 'gregory', 'greGoRÿ', etc...
avant la V9, je faisais ça en convertissant la colonne UTF-8 vers latin9 vers ascii (on ne peut pas faire directement un mapping utf-8 vers ascii);
mais en v9, dans le meilleur des cas, je tombe sur un 'bytea' qui focément n'est pas égal à ma chaine en ascii pur..
je suis plus clair comme ça ?
Hors ligne
#4 07/06/2011 10:43:56
- Marc Cousin
- Membre
Re : pg 9.0.4 - recherche accent incensitives sans modules externes ?
Vu que vous êtes en V9, si vous en avez la possibilité, installez le contrib unaccent:
SELECT unaccent('répéter');
unaccent
----------
repeter
Marc.
Hors ligne
#5 07/06/2011 10:49:58
- plouf le chien
- Membre
Re : pg 9.0.4 - recherche accent incensitives sans modules externes ?
je n'ai pas cette possibilité et ça ne fait que déplacer le problème.. je cherche une solution pure-postgresql "out-of-the-box"...
Hors ligne
#6 07/06/2011 11:00:07
- Marc Cousin
- Membre
Re : pg 9.0.4 - recherche accent incensitives sans modules externes ?
C'est à peu près dans toutes les boîtes, unaccent. Sous windows, c'est installé par défaut. Sous Linux, c'est juste un package optionnel à rajouter. Mais ça fait partie du source de PostgreSQL.
Sinon, il ne vous reste plus qu'à écrire un translate géant. Ça ne sera pas très long à faire, mais vous aurez toujours la crainte d'en avoir oublié un.
SELECT translate('répéter','éè','ee');
Rajouter les 200 caractères à convertir dans la liste
Je ne pense pas que vous vous en sortirez avec la méthode initiale, il y a eu pas mal de changements dans ces fonctions, dans les casts… postgresql est plus strict là dessus maintenant.
Marc.
Hors ligne
#7 07/06/2011 11:48:33
- plouf le chien
- Membre
Re : pg 9.0.4 - recherche accent incensitives sans modules externes ?
merci du tuyau pour translate, c'est exactement ce que je cherchais.
j'utiliserais unaccent quand il sera dans les 'core functions'...
Merci.
Hors ligne