Vous n'êtes pas identifié(e).
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
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
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
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
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
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
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