Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Dae pessoal, estou quebrando cabeça a algum tempo para descobrir a melhor forma de fazer uma busca, estou desenvolvendo um sistema para um guia telefônico e preciso fazer a busca pelos contatos, só que se o atendendo informar 'joão', a busca deve retornar todos os cadastrado com 'joão' e 'joao'.
Estava pensando em algo como:
SELECT nome FROM clientes WHERE RetiraAcento(nome) LIKE '%joao%';
Mas não sei se é possível utilizar uma função desta forma, e caso seja possível, alguém poderia me dar uma luz para criar essa função RetiraAcento()? Pois não sei quase nada de Functions! :(
Vi alguns exemplos na internet como este.
CREATE FUNCTION RetiraAcento(Texto VARCHAR(500))
RETURNS varchar(500) CHARSET utf-8
DETERMINISTIC
BEGIN
declare semAcento varchar(500);
SELECT lower(Texto) INTO semAcento;
SELECT REPLACE(semAcento,’ã’,'a’) INTO semAcento;
SELECT REPLACE(semAcento,’á’,'a’) INTO semAcento;
SELECT REPLACE(semAcento,’â’,'a’) INTO semAcento;
SELECT REPLACE(semAcento,’à’,'a’) INTO semAcento;
SELECT REPLACE(semAcento,’ê’,'e’) INTO semAcento;
SELECT REPLACE(semAcento,’é’,'e’) INTO semAcento;
SELECT REPLACE(semAcento,’ë’,'e’) INTO semAcento;
SELECT REPLACE(semAcento,’ï’,'i’) INTO semAcento;
SELECT REPLACE(semAcento,’í’,'i’) INTO semAcento;
SELECT REPLACE(semAcento,’ó’,'o’) INTO semAcento;
SELECT REPLACE(semAcento,’ô’,'o’) INTO semAcento;
SELECT REPLACE(semAcento,’ö’,'o’) INTO semAcento;
SELECT REPLACE(semAcento,’ú’,'u’) INTO semAcento;
SELECT REPLACE(semAcento,’ü’,'u’) INTO semAcento;
SELECT REPLACE(semAcento,’ç’,'c’) INTO semAcento;
SELECT REPLACE(semAcento,’ñ’,'n’) INTO semAcento;
SELECT upper(SemAcento) INTO semAcento;
RETURN semAcento;
END;
Se alguém manjar ajuda ae!
Vlw
Boa noite amigo,
Veja se ajuda:
http://forum.imasters.com.br/topic/454684-tirar-acento-no-mysql/
http://www.marcelooliveira.net.br/sql/mysql/2011/08/function-em-mysql-para-remover-acentos/
http://infoblemas.blogspot.com.br/2009/04/depois-de-muito-pesquisar-na-net-sobre.html
Além de tentar o que o colega acima sugeriu com o LIKE
Fico a disposição, abraço.
Não porque eu não sei se no banco está com acento ou sem! =S
Eu precisarei forçar a retirada dos acentos do banco para ter a precisão na busca!
Consegui trocando o COLLATE do banco para utf8_general_ci.
Quando faça um select no banco ele ignora os acentos que estão no banco.
Ex.: No banco eu tenho um registro: "Made Idéias".
Assim ele encontra:
SELECT nome FROM clientes WHERE nome LIKE '%ideias%';
Assim ele não encontra:
SELECT nome FROM clientes WHERE nome LIKE '%idéias%';
Não se isso é o normal, mas caso seja fica mais fácil retirar os acentos na programação para buscar sempre sem acento, já que no banco ele ignora o acento.
Valeu a ajuda ae pessoal, e se alguém quiser comentar se o que falei está correto ou não.
Att
Eu acho melhor tirar os acentos via programação então, faça isso e realize uns testes pra ver se ficou 100%.
Eu por mim tiraria os acentos da lingua portuguesa...
>
Eu por mim tiraria os acentos da lingua portuguesa...
Somos dois :D
Um exemplo de uma function destas em PLSQL (Oracle).
Reli os posts duas vezes porque não entendi o motivo de fazer isso para essa situação.
O MySQL tem suporte ao case isensitive.
Não bastaria configurar o charset encode para utf8_general_ci ??
Assim,
uma gabirra que eu fiz pra resolver esse problema uma vez foi substituir todo caracter acentuado por % no select
SELECT nome FROM clientes WHERE
nomeLIKE '%joao%';Assim não serve?