Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Consultas case-insensitive no PostgreSQL e no MySQL
Colaboração: Walter Rodrigo de Sá Cruz
Data de Publicação: 29 de Dezembro de 2006
Uma necessidade comum a desenvolvedores é fazer suas buscas no bancos de dados insensível a caso e insensível a acentos.
No Postgres, uma das formas de fazer uma consulta desse tipo é a seguinte:
SELECT nomemunic FROM tab_municipios
WHERE lower(to_ascii(nomemunic)) like lower(to_ascii('%Paulo%'))
Que buscará todos os nomes de município que tenham a palavra Paulo neles.
Observe que poderíamos fazer até uma salada de acentos e maíusculas - o resultado seria o mesmo.
SELECT nomemunic FROM tab_municipios WHERE
lower(to_ascii(nomemunic)) like lower(to_ascii('%PáuLô%'))
No MySQL, até a versão 4.0, as consultas eram por padrão case-insensitive e accent-insensitive. Isso mudou, porém, a partir da versão 4.1, que introduziu um suporte melhorado a collations e charsets.
A partir dessa versão, a sintaxe para uma consulta que ignora acentos e o caso seria a seguinte:
SELECT * FROM `tab_municipios` WHERE `NomeMunic` = _utf8 'SAO PAULO' COLLATE utf8_unicode_ci
Veja a relação completa dos artigos de Walter Rodrigo de Sá Cruz
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
18 Fev 2009, 14:46
18 Fev 2009, 14:35
como resolver esse problema sem ter que alterar o select? Teria como colocar algum comando na conexao para que ele sempre use o colation especico? Ou melhor, alguma configuração no BD para que ele sempre utilize o calation específico?
Agradeço desde de já.
17 Nov 2008, 14:33
Qual o seu problema?
06 Jul 2007, 17:28
02 Jan 2007, 14:27
Eu escrevi essa dica há algum tempo atrás. Nem sabia que tinha sido publicada :) . Quando ao lance dos indíces, você está corretíssimo!












