O Problema
A língua portuguesa gera diversos problemas para os DBA, um dos mais comuns esta no fato dos usuários querem digitar Joao (sem acento) em uma caixa de busca e querer que o banco localizar o João (com acento), para solucionar este problema no postgres você pode criar uma function que remove os acentos durante as consultas.
A Solução
CREATE OR REPLACE FUNCTION "public"."sem_acentos" (VARCHAR) RETURNS VARCHAR AS $body$ SELECT TRANSLATE($1, 'áéíóúàèìòùãõâêîôôäëïöüçÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛÄËÏÖÜÇ', 'aeiouaeiouaoaeiooaeioucAEIOUAEIOUAOAEIOOAEIOUC') $body$ LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; |
Como Usar
SELECT pss_telefone WHERE sem_acentos(pss_nome) LIKE sem_acentos('%joao%') |
Essa consulta irá retornar todos os João, com ou sem acento.
Em SQL Server esse problema pode ser ultrapassado usando uma COLLATION que seja AI (insensível à acentuação). Não existe algo de equivalente para Postgres?
Ainda não encontrei algo nativo para resolver este problema, se alguém tiver uma forma mais interessante posta ai 🙂
Não te recomendava usar isso para fazer filtros em tabelas grandes, visto que nesse caso ele tem que percorrer todos os campos e “transformá-los” através da função. Quanto muito, se não conseguires uma COLLATION como o Manuel Padilha indica, e muito bem, recomendo mesmo é a teres um campo onde guardes o valor já sem acentos.
Ocupa mais espaço mas poupa-te muito nos queries 🙂
Essa tbm eh outra solução, estes dias tava fazendo uns “testes” em uma loja virtual e acabei descobrindo que eles tinham na tabela produto um campo chamado nome_sem_acento para resolver este problema
no mysql, se estiver com o collate correto, é só fazer o select e pronto
Galera segundo meu brother Juliano a parada é só colcar o banco em latin1 e a página em UTF-8.
No postgres aqui funcionou lindo!!! thanks