Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Gostaria de fazer uma busca no MYSQL onde eu digito uma string sem acento e a consulta retorne com e sem acento.
SELECT * FROM tabela WHERE cidade LIKE '% Sao Paulo %'
No bd tem São Paulo e Sao Paulo quero que retorne os dois
Como resolvo isso?
não deu!!!
código original está assim:
$re = mysql_query(" SELECT * FROM gl_ir WHERE ir_situacao='ativo' AND ir_cidade LIKE '%$rbusca_cidade%'");Coloque o sql numa variável,
da um echo nela, veja o que aparece, copie o que aparece e entre no phpmyadmin e digite isso no sql.
e da um or die (mysql_error());
depois da query.
Se depois desses procedimentos padrões não resolver, poste o erro.
Cara, desculpe a ignorância, mais num entendi o que é pra fazer. Pode dar um exemplo...?
Basta um str_replace
<?php
$texto = "Á máríá gostá dó jóãó"; //Coloquei acento em todas as vogais ^^ e uma frase infantil ¬¬
$newTxt = str_replace(array('á','í','ó','ã','Á'),array('a','i','o','a','a'),$texto);
echo $newTxt;
?>meu problema é que no banco esta com acento.... eu quero digitar sem acento e ver o que esta no banco com acento.
Quando eu digito "criciúma" retorna "Criciúma".
Quando eu digito "criciuma"(sem acento) num retorna nada.
No banco pelo phpmyadmin esta assim Criciúma não sei se isso interfere já que quando retorna aparece Criciúma.
desta forma você não vai conseguir não....
Acho que se você usar o collation utf8_general_ci você irá conseguir isso de forma transparente e fácil.
VEja:
http://dev.mysql.com/doc/refman/5.0/en/charset-collation-implementations.html
Collations for Unicode multi-byte character sets
Some of these collations are based on the Unicode Collation Algorithm (UCA), others are not.
Non-UCA collations have a one-to-one mapping from character code to weight. In MySQL, such collations are case insensitive and accent insensitive. utf8_general_ci is an example: 'a', 'A', 'À', and 'á' each have different character codes but all have a weight of 0x0041 and compare as equal.
mysql> SET NAMES 'utf8' COLLATE 'utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT 'a' = 'A', 'a' = 'À', 'a' = 'á';
+-----------+-----------+-----------+
| 'a' = 'A' | 'a' = 'À' | 'a' = 'á' |
+-----------+-----------+-----------+
| 1 | 1 | 1 |
+-----------+-----------+-----------+
1 row in set (0.06 sec)
Pessoas com problemas inversos ao seu:
http://stackoverflow.com/questions/2044268/looking-for-case-insensitive-mysql-collation-where-a-a
http://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql
Man pelo que eu conheço de mysql você não vai conseguir fazer isso por SELECT, é mais facíl você fazer um tratamento de string para ele armazenar no banco de dados somente da maneira que você quer por exemplo, usa um replace que o nosso amigo citou acima e se ele digitar maiscula ou minuscula não vai fazer diferença no banco de dados vai sempre estar São Paulo, dessa maneira sempre vai estar no banco o "S" maisculo e o "P" e o "ã" então por exemplo ficaria assim.
$texto = "sao paulo"; //digite tudo minusculo e sem acentuação
$newTxt = str_replace(array('s','p','ã'),array('S','P','ã'),$texto); //aqui ele vai substituir "s" por "S" e assim por diante
A aproveitei o exemplo do nosso amigo _Rafhael_
Espero ter ajudado.
#10... é errôneo afirmar isso..
o correto recomendado está no post #9..
utf8_general_ci suporta diacritic
em suma, há suporte tanto para "case insensitive", o qual é especificado no próprio nome "_ci" e "accent insensitive" que também pode ser representado por "_ai"
Galera quero agradecer a força, mas resolvi o problema. Já que eu não estava dando certo fiz dessa forma aqui:
//header('Content-Type: text/html; charset=utf-8'); //essa parte não foi necessária.
//conexão bd
mysql_connect($host, $user, $senha);
mysql_select_db($bd);
//acrescentei essa parte após a conexão com bd como está abaixo: Agora quando cadastro aparece no banco tudo com acento certinho sem precisar fazer mais nada no código.
mysql_query(“SET NAMES ‘utf8′”);
mysql_query(“SET character_set_connection=utf8″);
mysql_query(“SET character_set_client=utf8″);
mysql_query(“SET character_set_results=utf8″);
//Único problema é que: o que já estava cadastrado agora retornam com os símbolos igual como esta no banco, mas como o site ainda num está no ar resolve o problema.
//..........
//Não esquecendo de ver se o meta tag está assim:
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
mysql_query(“SET NAMES ‘utf8′”);
mysql_query(“SET character_set_connection=utf8″);
mysql_query(“SET character_set_client=utf8″);
mysql_query(“SET character_set_results=utf8″);
isso resolve, mas ainda assim o seu banco não está configurado com utf8 "ci ai".
recomendo que corrija o collation e charset no banco e tabelas. Assim não precisará mais ter que usar essas querys para cada conexão..
>
Gostaria de fazer uma busca no MYSQL onde eu digito uma string sem acento e a consulta retorne com e sem acento.
SELECT * FROM tabela WHERE cidade LIKE '% Sao Paulo %'
No bd tem São Paulo e Sao Paulo quero que retorne os dois
Como resolvo isso?
Não precisa tirar acentos, dessa forma ele pesquisa normalmente
SELECT * FROM tabela WHERE cidade LIKE '%Sao Paulo%'
só tenta tirar os espaços que tinha antes e depois de Sao Paulo