você está aqui: Home  → Arquivo de Mensagens

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

Opinião dos Leitores

uhelliton
09 Fev 2014, 20:41
Obrigado Walter Rodrigo pela sua colaboração. Deus lhe abençoe meu irmão.
Carlos Vinicius
06 Nov 2012, 14:20
Uma outra maneira seria também:

SELECT nomemunic FROM tab_municipios WHERE
nomemunic ILIKE '%Paulo%'
Fábio Moura
06 Set 2012, 13:52
Show, parabéns pelo post, funciona direitinho, tanto no PSQL quanto no MySQL
Eduardo
15 Jul 2010, 09:35
A solução para o PostgreSQL não funcionou:


ERRO: conversão de codificação de UTF8 para ASCII não é suportada
SQL state: 0A000
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script