Vous n'êtes pas identifié(e).

#1 07/06/2011 10:01:45

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

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

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 smile

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

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

Pied de page des forums