[mysql] pesquisa com acentos

415 views
Skip to first unread message

Aurelio Saraiva

unread,
Sep 9, 2010, 12:37:26 PM9/9/10
to list...@googlegroups.com
Galera alguém sabe como que faço para uma pesquisa ser rigorosa no mysql

select * from contato where nome='aurélio'
!=
select * from contato where nome='aurelio'


se eu rodo atualmente isso ele considera o mesmo registro e retorna sempre os dois.
--
Atenciosamente,
Aurélio Saraiva
48 8411 4499

Alessandro Santos

unread,
Sep 9, 2010, 1:10:57 PM9/9/10
to list...@googlegroups.com
Eu tava fazendo uma enorme resposta pra vc usar collates mas...

select * from contato where BINARY nome='aurélio'

Testa aí =)

Também pode te ajudar:
http://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql
http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html

> --
> ============================================================
> LEIAM SEMPRE AS REGRAS DA LISTA:
> http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
> --
> LISTA PHP > http://groups.google.com.br/group/listaphp
> --
> REVISTA PHP > http://www.revistaphp.com.br
> --
> AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
> --
> PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
> --
> DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
> ============================================================

--
# Alessandro Ramos dos Santos @ Itaporanga @ SP @ Brasil
# Home: alessandrosantos.com.br # Twitter: @edenfall # MSN: lee.rain #
Gtalk: edenfall # Facebook: 100000184686728

"A nação que resolve trocar um pouco de liberdade por um pouco de
ordem não consegue nenhuma das duas, e não merece a ambas" - Thomas
Jefferson

Igor Escobar

unread,
Sep 9, 2010, 1:12:03 PM9/9/10
to list...@googlegroups.com
Fala Aurelio.

Você pode utilizar o LIKE do SQL.  SELECT * FROM sua_tabela WHERE nome LIKE '%aurélio%'. Mas eu recomendo que você crie um campo aonde os dados de pesquisa estejam normalizados. Sem acentos e os caracteres seguindo um padrão uniforme. De preferencia em uma tabela espelho, fora da base principal. Seria uma base somente para pesquisa que seria uma base espelho da oficial, porém, com os campos de pesquisa normalizado. Você terá resultados bem melhores e mais rápidos. Não esqueça também de modelar as tabelas corretamente. Buscando sempre nos indices da tabela e seguindo sempre a mesma ordem de declaração.




Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





On Thu, Sep 9, 2010 at 1:37 PM, Aurelio Saraiva <aurelio...@gmail.com> wrote:
--

Igor Escobar

unread,
Sep 9, 2010, 1:14:42 PM9/9/10
to list...@googlegroups.com
Nossa entendi tudo errado. Desculpe. Faz o que o @Alessandro disse fazendo a busca binaria e resolve.

explicando o que ele passou:

Se você converter "aurélio" para binário e "aurelio" você terá dois resultados diferentes. Por isso, vai funcionar tranquilo.



Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2010/9/9 Alessandro Santos <eden...@gmail.com>

Igor Escobar

unread,
Sep 9, 2010, 1:15:36 PM9/9/10
to list...@googlegroups.com
mysql> SELECT 'a' = 'A';
        -> 1
mysql> SELECT BINARY 'a' = 'A';
        -> 0
mysql> SELECT 'a' = 'a ';
        -> 1
mysql> SELECT BINARY 'a' = 'a ';
        -> 0
Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2010/9/9 Igor Escobar <titio...@gmail.com>

Aurelio Saraiva

unread,
Sep 9, 2010, 1:35:39 PM9/9/10
to list...@googlegroups.com
Obrigado, funciono perfeitamente, inclusive no que eu precisava que era no group by

group by BINARY nome

2010/9/9 Alessandro Santos <eden...@gmail.com>

Ricardo Fontão Verhaeg

unread,
Sep 9, 2010, 1:42:24 PM9/9/10
to list...@googlegroups.com
Gente, me desculpem, mas acredito que isto possa ser configurado no mysql...

achei estranho pois para mim, em todos os testes e aplicações que fiz, o sgbd fez a diferenciação normal:

mysql> select 'fontão' = 'fontao';
+----------------------+
| 'fontão' = 'fontao' |
+----------------------+
|                    0 |
+----------------------+

tenta ver qual o collation do banco.. e de conexão ao banco. eu geralmente uso utf8_general_ci

vou dar uma pesquisada nisso depois e se achar algo repasso

Ricardo Verhaeg
Bacharelado Ciências da Computação - USP - São Carlos (2005)
Virgos Tecnologia da Informação - Desenvolvimento


2010/9/9 Igor Escobar <titio...@gmail.com>

Igor Escobar

unread,
Sep 9, 2010, 2:02:25 PM9/9/10
to list...@googlegroups.com
Acho que isso responde a sua dúvida Ricardo:

The BINARY attribute in character column definitions has a different effect. A character column defined with theBINARY attribute is assigned the binary collation of the column character set. Every character set has a binary collation. For example, the binary collation for the latin1 character set is latin1_bin, so if the table default character set is latin1, these two column definitions are equivalent:

CHAR(10) BINARY
CHAR(10) CHARACTER SET latin1 COLLATE latin1_bin

The effect of BINARY as a column attribute differs from its effect prior to MySQL 4.1. Formerly, BINARY resulted in a column that was treated as a binary string. A binary string is a string of bytes that has no character set or collation, which differs from a nonbinary character string that has a binary collation. For both types of strings, comparisons are based on the numeric values of the string unit, but for nonbinary strings the unit is the character and some character sets support multi-byte characters.

Abraço ;)

Regards,
Igor Escobar
Systems Analyst & Interface Designer

+ http://blog.igorescobar.com
+ http://www.igorescobar.com
+ @igorescobar (twitter)





2010/9/9 Ricardo Fontão Verhaeg <rver...@gmail.com>

Aurelio Saraiva

unread,
Sep 9, 2010, 2:01:10 PM9/9/10
to list...@googlegroups.com
Para min esta bom como esta, eu só preciso em algumas situações fazer isso.

Mas se descobrir ai avisa a gente.

2010/9/9 Ricardo Fontão Verhaeg <rver...@gmail.com>
Gente, me desculpem, mas acredito que isto possa ser configurado no mysql...
Reply all
Reply to author
Forward
0 new messages