Busca com caixa alta e baixa

240 views
Skip to first unread message

Fagner Fernandes

unread,
Jul 16, 2009, 10:47:51 AM7/16/09
to GOPHP
Ola,

Estou desenvolvendo um sistema que busca no banco de dados MySql os
dados de certa tabela atraves de um formulario, a questão é a seguinte
por exemplo se eu tiver um arquivo no banco de dados com nome:
"Windows Live" ou "PuTTy" estou colocando assim: '%".$busca."%' , so
que eu preciso que o PHP não diferencie caixa alta ou baixa, porque é
de extrema importancia que os arquivos do banco de dados estejam
escritos corretamente. Se fosse apenas a primeira letra em caixa alta
seria facil porem como o exemplo o nome "PuTTY" daria erro. Ou seja
preciso que na busca o PHP nao diferencie caixa alta e caixa baixa.

Desde já obrigado....

Otávio Calaça Xavier

unread,
Jul 16, 2009, 11:04:11 AM7/16/09
to go...@googlegroups.com
A questão ai é o banco(mysql), não a linguagem(php)..

Faça algo como isso: "lower(campo) = '%".strtopower($busca)."%'"
O mysql tem a função lower para deixar tudo minusculo, no php o mesmo pode ser feito com strtolower.

Entendeu?

Até...
--
Otávio Calaça Xavier
Desenvolvedor Web
Tecgº. Redes de Comunicação
poomax.com.br


2009/7/16 Fagner Fernandes <fag...@tiup.com.br>

Felipe Nascimento de Moura

unread,
Jul 16, 2009, 12:46:37 PM7/16/09
to go...@googlegroups.com
tu pode fazer tudo direto no banco, tambem ... ai varia o q tu achar q processe mais rapido, e tal.
Conforme o q o Otavio comentou, seria algo assim:
"lower(campo) = lower('%".$busca."%')"
simplesmente transferindo o segundo lower do PHP para dentro do banco, tambem...

nao seria um LIKE no lugar daquele "=" ?


2009/7/16 Otávio Calaça Xavier <otav...@gmail.com>



--
--
Felipe N. de Moura
Desenvolvimento Web

http://felipenascimento.org
http://thewebmind.org
---------------------------------
Fazendo da web um lugar melhor pra se viver.
Making the web a better place to live

Ana Lyvia Vieira Silva

unread,
Jul 16, 2009, 1:00:19 PM7/16/09
to go...@googlegroups.com
Se eu entendi, ele se confundiu na hra de falar... Acho q ele gostaria q a busca diferenciasse sim caixa alta e caixa baixa.

Ou tou errada? Pq ele levantou a questão de estar escrito corretamente e do PuTTy...



thiago fernandes

unread,
Jul 16, 2009, 1:06:15 PM7/16/09
to go...@googlegroups.com
O acredito que o ideal seria criar um padrao antes de gravar no banco... vc ganha em desempenho na sql... mas fica a seu criterio...
2009/7/16 Ana Lyvia Vieira Silva <ana....@gmail.com>

Fagner Fernandes

unread,
Jul 16, 2009, 2:02:13 PM7/16/09
to GOPHP
Seguinte talvez eu nao tenha sido claro,

é o seguinte tenho no meu banco de dados MySql com texto tipo: PuTTy e
Windows Live Mensenger, tenho um formulario que faz a busca pela
palavra "chave" digitada pelo usuario, no arquivo de busca esta
assim: $sql = mysql_query("SELECT * FROM arquivos WHERE nome LIKE '%".
$busca."%' "); o problema é que tenho obrigatoriamente não modificar
os nomes dos dados da tabela ( exemplo: PuTTy nao posso mudar para
putty, ou PUTTY) entao se o cliente digitar no formulario a palavra
chave: putty nao retornara resposta alguma. Preciso que se o usuario
digitar a palavra chave de qualquer forma (maisculo, minusculo ou
ambos) ele retorne a consulta do banco da mesma forma, ou seja o
cliente digita no formulario a palavra chave: putty e a consulta PHP
retorna o nome PuTTy por exemplo.

Galera brigadão pela ajuda,

Cordialmente,
Fagner Fernandes
Desenvolvedor WEB - Desempregado :(

Ana Lyvia Vieira Silva

unread,
Jul 16, 2009, 2:06:24 PM7/16/09
to go...@googlegroups.com
Nesse caso Fagner, tanto a explicação do Otávio quanto a do Felipe resolvem! No caso aqui da empresa, o banco de dados, que tbm é mysql não faz distinção entre maiúsculas e minúsculas, é uma configuração. Mas agora eu não tou sabendo qual é. O pessoal do servidor (locaweb) onde fica o banco que mexe nessas coisas...

Talvez vc consiga configurar o seu banco assim tbm. Daí facilita pra ti, não precisa se preocupar com isso em todas as consultas. Ou então faça como o Otávio ou Felipe sugeriram.


Andre Rodovalho

unread,
Jul 16, 2009, 2:06:27 PM7/16/09
to go...@googlegroups.com
C vai usar:
$sql = mysql_query("SELECT * FROM arquivos WHERE lower(nome) LIKE '%".strtolower($busca)."%' ");

Essa query nao muda nada no seu banco, so pega os dados do banco em minúsculo, e compara com os dados digitados pelo usuario em minúsculo... Sako???

2009/7/16 Fagner Fernandes <fag...@tiup.com.br>

Fagner Fernandes

unread,
Jul 16, 2009, 2:38:23 PM7/16/09
to GOPHP
Galera muito obrigado pela ajuda,
Consegui resolver o problema,

A busca no banco de dados e feita no meu caso pelo campo "nome" o
mesmo estava no Mysql com: Collation = latin1_bin, eu troquei o mesmo
por: latin1_swedish_ci, e resolveu o problema, agora o usuario pode
digitar a palavra chave com caixa baixa ou alta e retorna a busca sem
diferença do mesmo. Tipo usuario digitou putty no banco ta PuTTy,
entao a consulta retorna o mesmo sem problema de caixa alta ou baixa.

Vlw galera todos ajudaram muito...

Otávio Calaça Xavier

unread,
Jul 16, 2009, 3:18:16 PM7/16/09
to go...@googlegroups.com
E todos viveram felizes para sempre...

Mas, como refactoring, tente fazer o que o Thiago falou... tratar os dados antes de inseri-los no banco... Aumentará o desempenho

Até mais...

--
Otávio Calaça Xavier
Desenvolvedor Web
Tecgº. Redes de Comunicação
poomax.com.br


2009/7/16 Fagner Fernandes <fag...@tiup.com.br>

Brenno Ferreira

unread,
Jul 18, 2009, 6:14:21 AM7/18/09
to go...@googlegroups.com
Cara mas vc acha q esse é o jeito correto de fazer?!
Bom para mim não!!!
Num adianta você mudar o tipo de caracter no DB, talvez, e mais problemática
seja você fazer o que foi falado na resposta anterior, implementar na sua
query alguma "função" que, no momento da comparação dê um retorno true or
false.
Você modificar todo o banco, e as páginas, para que se acertem ao que você
quer não é a solução, além de diferenciar no tempo de processamento do seu
servidor, não é a forma semantica e certa de fazer. A solução talvez seja
você procurar uma boa documentação do CSS2, XHTML, PHP e MySQL pois só assim
você, tentará e tenho ctz qye irá conseguir entrar nesse mercado WEB que é
tão deficiente.

abraços,
__________ Information from ESET NOD32 Antivirus, version of virus signature
database 4254 (20090717) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com




__________ Information from ESET NOD32 Antivirus, version of virus signature database 4256 (20090718) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com



Reinaldo Borges

unread,
Jul 18, 2009, 6:53:12 AM7/18/09
to go...@googlegroups.com
Olá,

Se pensar no desempenho, uma função no momento da comparação é muito mais
lenta do que mudar "collation" do banco.

Collation do banco não define apenas o "tipo de caracter" do banco, mas também
como será feita a ordenação dos caracteres e como serão tratadas maiúsculas e
minúsculas.

Se não quiser alterar o default collation do banco ou tabela, você pode mudar
o collation apenas na hora da pesquisa, sem ter que usar uma função pra isso.
Para detalhes, veja no manual: http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html
Exemplo:
     $sql = "SELECT *
FROM arquivos
WHERE nome LIKE _latin1 '".$busca."%' COLLATE latin1_swedish_ci");
Usando esse recurso, você não faz com que o banco processe uma função para cada
linha da tabela. Isso apenas altera a forma como o mecanismo de busca do banco
irá funcionar.

[]'s

Reinaldo Borges


2009/7/18 Brenno Ferreira <brdesig...@gmail.com>

Andre Rodovalho

unread,
Jul 18, 2009, 12:55:28 PM7/18/09
to go...@googlegroups.com
Bao pra carai, pena que usando querys desse tipo perdemos a portabilidade da aplicaçao.. para o caso de uma migracao de banco!

2009/7/18 Reinaldo Borges <reinald...@gmail.com>
Reply all
Reply to author
Forward
0 new messages