Ignorar acentos em sql

5 respostas
rafaelveggi

Olá a todos!

Estou utilizando em um aplicativo um banco HSQLDB preenchido com Strings contendo acentos, cedilha etc.

O meu problema é o seguinte: preciso fazer as pesquisas com um teclado sem acentos e sem cedilhas (ou qualquer outro caracter).
É um teclado virtual, será utilizado em um monitor touchscreen e o sistema não deve preocupar o usuário com caso, acentos etc.
Como eu faço para pesquisar por “para” e ter como resposta “para”, “pára” e “pará” ?

Já pesquisei no fórum, mas parece que o problema só tem soluções braçais. Penso em criar mais uma coluna em todas as tabelas do db e preenchê-las em ASCII e pesquisar apenas nelas.
Alguém conhece uma solução mais tranquila pra isso?

Muito obrigado a todos

5 Respostas

marciosantri

Existem outras saídas como criar funções no banco para retirar os acentos e pesquisar só que dependendo da massa de dados fica um pouco lento ficar processando em todas as pesquisas.

Eu faria uma uma coluna diferenciada apenas para as pesquisas em que isso fosse realmente necessário. Eu não vejo uma solução que seja mais “rápida” do que isto, em termos de processamento.

Aldrin_Leal

Anos atrás, fiz isso

O Stemmer/Tokenizer do Lucene faz algo semelhante, acho…

marciosantri

Aldrin Leal:
Anos atrás, fiz isso

O Stemmer/Tokenizer do Lucene faz algo semelhante, acho…

Se tratando de Java, ok.
Se tratando de consulta no banco fica meio lento porque vai virar uma função dentro do banco ou
vc terá que trazer os dados para serem tratados na sua aplicação (isso seria catastrófico).

Aldrin_Leal

Marcio,

Quando precisei fazer, eu salvei o índice de busca no próprio banco. Era um processo periódico, e a base era pequena. Obviamente, o ideal era usar uma base com suporte a stored procedures em java e usar isso como coluna na trigger.

Pensando bem, como é HSQLDB, use a função e simplesmente a defina na base. Melhor ainda se você fazê-la como coluna autocomputada ou via trigger.

F

Olá resgatando esse topico. Após ver a sugestão do Aldrin Leal de utilizar lucene resolvi implementar no meu projeto, porém preciso de forma contraria da dele.

Eu passo como entrada “para ou pára ou pará” e me retorna para.

Olhei essa classe Stemmer/Tokenizer mas não vi como posso fazer isso…

Alguem sabe qual objeto eu uso ou tem alguma dica?
Outra duvida é se tem algo que eu passe “pára…” e me retorne “para”, ou seja ignorando caracteres especiais.

flws

Criado 10 de março de 2008
Ultima resposta 11 de abr. de 2008
Respostas 5
Participantes 4