Silfar Goulart escreveu:
> Bem resumindo:
>
> select to_ascii('CRÉD', 'LATIN1')
>
> Se o server_encoding for win1252 retorna 'CRED'
> Mas se o server encoding for UTF8 retorna 'CRA D', Neste caso deveria se
> usar a função convert :
>
> select to_ascii(convert('CRÉD', 'utf8', 'LATIN1'), 'latin1'), mas aí
> acontece um erro, pq to_ascii espera um tipo texto e convert agora
> retorna bytea.
>
> Aí não sei como resolver, acho que esta mudança deve ter acontecido no 8.3.
>
Por quê você não vai por um caminho mais simples e utiliza uma função
do tipo:
CREATE OR REPLACE FUNCTION sem_acento(text) RETURNS text AS $$
SELECT translate($1,
'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ',
'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');
$$ LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT;
Repare que não estão contemplados todos os caracteres acentuados
(creio que os do português estão), mas, aí, é só uma questão de
complementar as listas acima (caracteres acentuados e os
correspondentes não acentuados).
Dependendo do conteudo de seu banco de dados pode ser que você
necessite tratar, por ex. o n com til, s com cedilha, os com caron (um
circunflexo invertido), os com barra etc.
Se você utilizar árabe, hangul ou chinês (entre outros) não tenho a
menor idéia do comportamento esperado para esta função.
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral