Consultas case-insensitive e accent-insensitive no MySQL

Uma necessidade comum com dados em língua portuguesa são as buscas no bancos de dados insensível a caso e insensível a acentos.

No MySQL, até a versão 4.0, as consultas eram por padrão insensível ao caso (case-insensitive) e insensível ao acento (accent-insensitive). Isso mudou, porém, a partir da versão 4.1, que introduziu um suporte melhorado a comparações (collations) e definições de caracteres (charsets). Alguns desenvolvedores devem ter ficado surpresos com suas buscas que antes ignoravam acentos e maiúsculas e agora já exigiam que se colocasse.

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

Adaptado de Consultas case-insensitive no PostgreSQL e no MySQL

Esta entrada foi publicada em MySQL e marcada com a tag , . Adicione o link permanenteaos seus favoritos.

10 respostas a Consultas case-insensitive e accent-insensitive no MySQL

  1. Fabrizio disse:

    o problema deste método é que se fizer a consulta com o acento, não vai funcionar.
    Por exemplo: SELECT *
    FROM `tab_municipios`
    WHERE `NomeMunic` = _utf8 ‘SÃO PAULO’ COLLATE utf8_unicode_ci

    Reply

  2. rafael disse:

    Fabrizio, a consulta é justamente para prever o uso ou não do acento. A consulta com acento irá funcionar.
    Tanto a minha consulta quanto a sua retornam o registro com ou sem o acento.

    Reply

  3. Aqui não funcionou…

    Reply

  4. rafael disse:

    Willian, então você precisa ver com cuidado a sua instalação do MySQL.

    Reply

  5. Hélio disse:

    aqui também não funcionou :(

    Reply

  6. rafael disse:

    Hélio, veja se a sua versão do MySQL é muito antiga.

    Reply

  7. Hélio disse:

    mysql Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1

    Reply

  8. rafael disse:

    Hélio, pode ser a codificação da instalação. De repente você pode fazer a busca diretamente sem o artifício de usar utf8, se a codificação da instalação já for esta.

    Reply

  9. Bruno disse:

    Você saberia me dizer se no caso de o registro no bd estar acentuado como eu faço para que uma consulta por uma keyword não acentuada funcione?

    Ex.: Tabela com campo nome e um registro com valor ‘João’. Quando pesquisar por ‘Joao’ teria que ser encontrado o registro com o acento.

    Reply

  10. Hélio disse:

    Rafael, achei o problema que tinha com pesquisa…
    Como acesso mysql via php, não estava setando o charset:
    php.net/mysql_set_charset
    Agora funciona tudo transparente… sem nenhuma gambiarra

    Reply

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>