Ir ao conteúdo
  • Cadastre-se

Acento em db mysql


gcp_jau

Posts recomendados

Fiz um formulário html/php que registra os dados em um bd MySQL. Mas quando algum dos campos contém acento, ele substitui por códigos.

Por exemplo, digitando "Fundação", no db fica "Fundação".

Como corrigir isso? Os dados que já foram inseridos podem ser corrigidos? Como não acontecer daqui para frente?

Valeu, até mais.

Link para o comentário
Compartilhar em outros sites

Cara,

não mexo com PHP e nem MySql, trabalho com ASP e SQL server,..rsrss

mas tenho alguns materiais q podem te ajudar...

pesquisar o q você tem com acento na tb

http://www.drsolutions.com.br/exemplos/regesxp_mysql.pdf

sugestao: mande substituir por vazio...se puder ficar sem acento...

outra: da uma olhada na função "replace"

flwww

Link para o comentário
Compartilhar em outros sites

Consegui arrumar o problema em parte colocando esse código no topo da página.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ele vai ler tudo que será exibido e converter caracteres no formato HTML para o português.

O problema é que, se no db já estiver em português (fundação, no exemplo citado), ele vai exibir um "?" no lugar. Acontece o mesmo se nessa página houver textos digitados com acento.

Obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

Tenta trocar esse que você colocou por:

 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Assim em vez de trocar o acento por "?", ele não mostra nada. Esconde a letra que tem acento. Isso nos textos que estão no arquivo.

Nos textos que estão no db, ele mostra em html, então não adianta. Mas valeu pela dica.

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Olá pessoal venho trazer está discução atona novamente porque estou com o mesmo problema, e não quis fazer outro tópico com o mesmo assunto, e também talvez agora alguém saiba responder.

No meu caso acontece da seguinte maneira. As informações cadastradas no BD (MySQL) e que são puxadas pelo php, aparecem sem acentos quando o BD está no collation latin1_swendish_ci, quando estão no utf-8_unicode_ci só os acentos agudos e ç dão problema. Esperimentei trocar o setchar do html entre iso-8859-1 as info vindas do BD ficaram OK, porém no texto escrito na pagina todos os acentos e "ç" ficaram ilegiveis, e a situação se inverte quando usu o setchar = utf-8.

Preciso de ajuda, se alguém conhecer uma solução ou lugar em que eu possa encontra-la, tem desde já o meu agradecimento.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Olá pessoal venho trazer está discução atona novamente porque estou com o mesmo problema, e não quis fazer outro tópico com o mesmo assunto, e também talvez agora alguém saiba responder.

No meu caso acontece da seguinte maneira. As informações cadastradas no BD (MySQL) e que são puxadas pelo php, aparecem sem acentos quando o BD está no collation latin1_swendish_ci, quando estão no utf-8_unicode_ci só os acentos agudos e ç dão problema. Esperimentei trocar o setchar do html entre iso-8859-1 as info vindas do BD ficaram OK, porém no texto escrito na pagina todos os acentos e "ç" ficaram ilegiveis, e a situação se inverte quando usu o setchar = utf-8.

Preciso de ajuda, se alguém conhecer uma solução ou lugar em que eu possa encontra-la, tem desde já o meu agradecimento.

Obrigado.

Bom pessoal, pra quem teve um problema parecido com o meu vai aqui alguns toques.

1º pelo o que eu lí por aí o utf-8 é o melhor sistema de caracteres para se trabalhar no MySQL e PHP pela universalidade.

2º mudar a tag chaset no HTML realmente funciona, é geralmente dá conta do recado.

3º Tentar não inserir as informações do BD nas tabelas pelo PHPMyAdmin, este foi meu erro, vou explicar:

Acho que o problema foi eu ter criado o Banco de Dados com um collation tipo o latin1_swendish_ci e depois puxar as informações pela pagina PHP. Até aqui as coisas ainda dão certo, problema mesmo parece ser quando você insere informações, preenche tabelas, pelo phpMyAdmin e e pucha os dados pela sua pagina em PHP que está usando o charset utf-8, que funciona muito bem com os acentos que você escreveu na página mas da pau com os que do BD inseridos pelo phpMyAdmin. É aí que eu acho que o Collation latin1 interfere, pois quando você insere a partir do formulario php, você manda no formato utf-8, até dá problema quando você visualiza pelo phpMyAdmin, mas quando você pucha pela sua pagina PHP que usa também o utf-8, dá tudo Certo.

Quanto a usar a tag html <meta charset = iso-8859-1> também altera, o problema é que as informações que você digitou nos textos das suas páginas parecerem ser lidos com eficiencia sómento com o utf-8 setado, na minha ignorância deduzo que cada colltion se dá melhor com um tipo de codificação, por isso repito, para mim utf-8_general_ci como colation para mim é a melhor opção, no entanto para você que está lendo pode não ser tão boa dependendo do seu projeto e caracteres que vai inserir.

No entanto alerto, mudar sómente o colation do BD e inserir informações pelo php MyAdmin tb dá erro!

Quanto a trocar o collation do BD (MySQL) talvez funcione, se você criar todas as tabelas de novo. Fiz um teste e criei uma tabela nova com o collation em utf-8, não funcionou, os caracteres com acento se comportaram da mesma maneira que os outros, como se tivessem sido criados com o collation em latin-1.

Por fim, ressauto novamente, quando substitui os registros inseridos diretamente com o PHPMyAdmin por registros inseridos com formularios das paginas php tudo ficou perfeito.

Peço desculpas pela falta de explicações teóricas, mas não sou expert nessa linguagem de programação, compartilho da minha experiencia para que outras pessoas possam aproveitar este conhecimento.

Um abraço a todos obrigado pela atenção e quem tiver uma explicação teórica para estes fatos por favor compartilhe.

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...

Sei que o post é antigo! Mas se ajudar alguém....

Eu estava com o mesmo problema, e a "melhor" solução(alias duas) que encontrei foi a seguinte:

/*** "método" UTF-8: ***/

Collation do banco: utf8_general_ci

Charset da página: utf-8

sql banco de dados:

CREATE TABLE `acentos` (
`id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
`texto` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

código da página teste:

<?
$dados_con = array (
"host" => "localhost",
"user" => "root",
"pass" => "",
"db" => "testeacento"
);
$conexao = mysql_connect (
$dados_con["host"],
$dados_con["user"],
$dados_con["pass"]
) or die(
mysql_error()
);
mysql_select_db (
$dados_con["db"],
$conexao
 ) or die (
mysql_error()
 );

$acao = $_GET['acao'];

if($acao == 'salvar'){
/*
Decodifica a variavel 'texto' para inserir no banco de dados.
Desta maneira ao invés de gravar "é" grava "é", e assim por diante...
*/
$texto = utf8_decode($_POST['texto']);

$sql = 'INSERT INTO acentos VALUES("", "'.$texto.'")';
mysql_query($sql) or die(mysql_error);
header('location: /');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>
<form action="?acao=salvar" method="post">
<input type="text" name="texto" />
<br />
<input type="submit" value="Salvar" />
<input type="reset" value="Limpar Dados" />
</form>
<br />
<table id="cadastrados">
<?
$_sql = 'SELECT * FROM acentos';
$res = mysql_query($_sql) or die(mysql_error);
while($row = mysql_fetch_row($res)){

/*
A cada loop o valor de $row e codificado novamente em utf-8,
transformando novamente: "é" em "é" para que a pagina possa
interpretar o símbolo.
*/
for($i=0; $i<count($row); $i++){
$row[$i] = utf8_encode($row[$i]);
}

/*
imprime os dados na tela
*/
echo '<tr>';
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '</tr>';

}
?>
</table>
<body>
</body>
</html>

/*** "método" Latin1: ***/

Collation do banco: latin1_general_ci

Charset da página: iso-8859-1

sql banco de dados:

CREATE TABLE `acento` (
`id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
`texto` varchar(255) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ;

código da página teste:

<?
$dados_con = array (
"host" => "localhost",
"user" => "root",
"pass" => "",
"db" => "acento"
);
$conexao = mysql_connect (
$dados_con["host"],
$dados_con["user"],
$dados_con["pass"]
) or die(
mysql_error()
);
mysql_select_db (
$dados_con["db"],
$conexao
 ) or die (
mysql_error()
 );

$acao = $_GET['acao'];

if($acao == 'salvar'){
$texto = $_POST['texto']; //não precisa decodificar nada!
$sql = 'INSERT INTO acento VALUES("", "'.$texto.'")';
mysql_query($sql) or die(mysql_error);
header('location: /');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sem título</title>
</head>
<form action="?acao=salvar" method="post">
<input type="text" name="texto" />
<br />
<input type="submit" value="Salvar" />
<input type="reset" value="Limpar Dados" />
</form>
<br />
<table id="cadastrados">
<?
$_sql = 'SELECT * FROM acento';
$res = mysql_query($_sql) or die(mysql_error);
while($row = mysql_fetch_row($res)){
/*
imprime os dados na tela
*/
echo '<tr>';
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '</tr>';

}
?>
</table>
<body>
</body>
</html>

Testem e se houver algum erro por favor desconsidere, afinal é meu primeiro post!

Link para o comentário
Compartilhar em outros sites

  • 8 meses depois...
  • 1 ano depois...
Sei que o post é antigo! Mas se ajudar alguém....

Eu estava com o mesmo problema, e a "melhor" solução(alias duas) que encontrei foi a seguinte:

/*** "método" UTF-8: ***/

Collation do banco: utf8_general_ci

Charset da página: utf-8

sql banco de dados:

CREATE TABLE `acentos` (
`id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
`texto` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

código da página teste:

<?
$dados_con = array (
"host" => "localhost",
"user" => "root",
"pass" => "",
"db" => "testeacento"
);
$conexao = mysql_connect (
$dados_con["host"],
$dados_con["user"],
$dados_con["pass"]
) or die(
mysql_error()
);
mysql_select_db (
$dados_con["db"],
$conexao
 ) or die (
mysql_error()
 );

$acao = $_GET['acao'];

if($acao == 'salvar'){
/*
Decodifica a variavel 'texto' para inserir no banco de dados.
Desta maneira ao invés de gravar "é" grava "é", e assim por diante...
*/
$texto = utf8_decode($_POST['texto']);

$sql = 'INSERT INTO acentos VALUES("", "'.$texto.'")';
mysql_query($sql) or die(mysql_error);
header('location: /');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sem título</title>
</head>
<form action="?acao=salvar" method="post">
<input type="text" name="texto" />
<br />
<input type="submit" value="Salvar" />
<input type="reset" value="Limpar Dados" />
</form>
<br />
<table id="cadastrados">
<?
$_sql = 'SELECT * FROM acentos';
$res = mysql_query($_sql) or die(mysql_error);
while($row = mysql_fetch_row($res)){

/*
A cada loop o valor de $row e codificado novamente em utf-8,
transformando novamente: "é" em "é" para que a pagina possa
interpretar o símbolo.
*/
for($i=0; $i<count($row); $i++){
$row[$i] = utf8_encode($row[$i]);
}

/*
imprime os dados na tela
*/
echo '<tr>';
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '</tr>';

}
?>
</table>
<body>
</body>
</html>

/*** "método" Latin1: ***/

Collation do banco: latin1_general_ci

Charset da página: iso-8859-1

sql banco de dados:

CREATE TABLE `acento` (
`id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
`texto` varchar(255) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ;

código da página teste:

<?
$dados_con = array (
"host" => "localhost",
"user" => "root",
"pass" => "",
"db" => "acento"
);
$conexao = mysql_connect (
$dados_con["host"],
$dados_con["user"],
$dados_con["pass"]
) or die(
mysql_error()
);
mysql_select_db (
$dados_con["db"],
$conexao
 ) or die (
mysql_error()
 );

$acao = $_GET['acao'];

if($acao == 'salvar'){
$texto = $_POST['texto']; //não precisa decodificar nada!
$sql = 'INSERT INTO acento VALUES("", "'.$texto.'")';
mysql_query($sql) or die(mysql_error);
header('location: /');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sem título</title>
</head>
<form action="?acao=salvar" method="post">
<input type="text" name="texto" />
<br />
<input type="submit" value="Salvar" />
<input type="reset" value="Limpar Dados" />
</form>
<br />
<table id="cadastrados">
<?
$_sql = 'SELECT * FROM acento';
$res = mysql_query($_sql) or die(mysql_error);
while($row = mysql_fetch_row($res)){
/*
imprime os dados na tela
*/
echo '<tr>';
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '</tr>';

}
?>
</table>
<body>
</body>
</html>

Testem e se houver algum erro por favor desconsidere, afinal é meu primeiro post!

O método Latin1 funcionou pra mim. valeu

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Oi pessoal!

Já tive esse mesmo problema, mas achei um jeito certo.

Quando eu crio uma tabela no phpMyAdmin, seleciono na collation a opção:

"latin1_spanish_ci"...

Ele só funciona da seguinte forma, se você fizer um cadastro via formulário, ele é cadastrado com caracteres diferentes, MAS, na hora de fazer uma consulta e exibir na tela, ele exibe perfeitamente com as acentuções... Pelo menos comigo ten funcionado!!

Agora, se vocês forem cadastrar dados acentuados, diretamente no banco de dados, ai da M. estraga! hehehehe

Espero ter ajudado e gostaria de saber se vocês tem tido sucesso com essa minha dica, ok?

Abraço á todos.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!