Consultas case-insensitive no PostgreSQL e no MySQL


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

Nenhum comentário:

Postar um comentário