Pesquisa sem diferenciação de acentuação

E aí galera, tenho uma aplicação em java com o postgresql, e preciso que as consultas feitas no mesmo, não diferencie a acentuação, por exemplo : ao pesquisar o nome " jose " quero que retorne tanto “jose”, quanto “josé”. Eu pesquisei algumas maneiras de fazer isso, porém sem sucesso, também existe a possibilidade de usar a extensão UNACCENT, mas há um problema, a empresa que hospeda o banco de dados, não possui esse tipo de serviço, e somente um super usuario pode criar tal extensão, o mesmo não é permitido. Alguém saberia alguma alternativa para resolver tal problema ? o banco está em utf8.

Se vc tem permissão de criar functions no postgre, isso pode te ajudar…

http://www.postgresql-archive.org/Accent-insensitive-search-td1916240.html

Pesquise o post de Thom Brown Mar 18, 2009; 2:24pm ele mostra uma “gambis” marota :joy:

1 curtida

Uma outra maneira de fazer isso é normalizar o valor da coluna na própria aplicaçao e manter uma coluna extra no banco usada apenas para pesquisa. Você teria algo como:

nome          nome_pesquisa
José          jose
Jose          jose
Fátima        fatima
Fatima        fatima

Com isso, na hora de pesquisar, se aplicar a mesma funçao de normalizar no texto procurado, você pode fazer a pesquisa nesse campo nome_pesquisa de forma eficiente e sem nenhum trabalho a mais do banco de dados (em troca de mais espaço, que costuma ser barato hoje em dia).

Obs: Repare que você nao precisa do atributo nome_pesquisa na sua classe, pode só criar esse valor na hora de gravar/ler do banco.

2 curtidas

Obrigado pela respostas e principalmente pela ajuda @AbelBueno @rodevops , consegui resolver. Para quem estiver passando pelo mesmo problema, utilizei a seguinte função :

CREATE OR REPLACE FUNCTION remove_acento(text)
RETURNS text AS
$BODY$
SELECT TRANSLATE($1,‘áàãâäÁÀÃÂÄéèêëÉÈÊËíìîïÍÌÎÏóòõôöÓÒÕÔÖúùûüÚÙÛÜñÑçÇÿýÝ’,‘aaaaaAAAAAeeeeEEEEiiiiIIIIoooooOOOOOuuuuUUUUnNcCyyY’)
$BODY$
LANGUAGE sql IMMUTABLE STRICT
COST 100;
ALTER FUNCTION remove_acento(text)
OWNER TO postgres;
COMMENT ON FUNCTION remove_acento(text) IS ‘Remove letras com acentuação’;

Após criada, chamei ela tanto na entrada quando no valor do banco.

1 curtida