Ir ao conteúdo

Acento em db mysql


gcp_jau

Posts recomendados

Postado

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.

Postado

Obrigado pela ajuda lucasalmeidabh. Mas esse artigo não é o que eu estou precisando.

Eu quero permitir o uso de acentos, então não posso substitui-los.

As pessoas cadastram seus nomes lá, não posso tirar acentos dos nomes delas.

Postado

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.

  • Membro VIP
Postado

Tenta trocar esse que você colocou por:

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

Postado
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.

  • 2 anos depois...
Postado

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.

Postado
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.

  • 4 meses depois...
Postado

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!

  • 8 meses depois...
Postado

Pessoal tenho um problema se vocês puderem me ajudar agradeço.

eu importei um arquivo txt para o mysql e os dados com acentos estão sendo mostrados com ? vocês poderiam me dar um help.

  • 1 ano depois...
Postado
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

  • 1 ano depois...
Postado

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.

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...