Ir para conteúdo

POWERED BY:

Arquivado

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

willian.abreu2726

Erro de Acentuação ao Gravar no MySQL

Recommended Posts

Boa noite pessoal!

Sou novo no fórum, então desde já peço desculpas se eu não souber exemplificar bem minha dificuldade e também agradeço muito por todos que puderem ajudar.

 

Pesquisei inúmeros posts a respeito deste assunto (Erro de Acentuação ao Gravar no MySQL) e segui muitas dicas, mas meu problema está persistindo.

 

Para facilitar a ajuda e o entendimento, criei um arquivo PHP de testes. (Seguindo algumas idéias que encontrei no fórum).

 

Vamos lá!

 

Situação do arquivo:

1. Este arquivo PHP está codificado e com <meta> em UTF-8.

2. O banco de dados e todas as tabelas estão com charset UTF-8 e collation utf8_unicode_ci

3. Fiz o teste com a função mysql_client_encoding() e retornou UTF-8

 

Obs.: Utilizei o EditPad para verificar a codificação do arquivo.

 

Erro:

Quando através do formulário envio um nome/palavra com acentos (ex.: João), está sendo gravado no banco de dados "Joòo". Mesmo estando gravado desta forma no banco de dados, ao resgatar do banco para exibir na página via php, o resultado impresso na página é "João".

 

Se eu utilizar o próprio terminal do mysql (S.O. Windows) para inserir o nome "João", logo é gravado corretamente. No entanto, se eu quiser exibir na página via php, o resultado impresso é "JoÆo".

Por curiosidade, fiz o teste enviando "JoÆo" pelo próprio formulário e foi gravado corretamente no banco de dados. rsrs

 

Abaixo segue o código:

 

<?php header("Content-Type: text/html; charset=UTF-8",true); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br" xml:lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Teste</title>
</head>
<body>
<form action="bd.php" method="post">
	Nome: 
	<input type="text" name="nome">
	<input type="submit" value="Enviar">
</form>
<?php
$op = $_GET['op'];
$host = "localhost";
$usuario = "root";
$senha = "admin";
$bd = "banco";

$nome = $_POST['nome'];

$conexao = mysql_connect($host, $usuario, $senha);
mysql_select_db($bd);
mysql_set_charset('utf8', $conexao);
ini_set('default_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');

	if ($nome) {
	$query = "insert into teste values (NULL, '".$nome."')";
	$resultado = mysql_query($query,$conexao);
	}
	
	$query = "Select * from teste order by idteste desc limit 10";
	
	$resultado = mysql_query($query,$conexao);
	while ($linha = mysql_fetch_array($resultado)){
		echo $linha[0]." - ".$linha[1]."<br>";	
		}
?>

Já utilizei utf8_encode() e utf8_decode() e eles até pioram a situação.

Também já tentei transformar tudo em ISO-8859-1, mas o erro é sempre o mesmo.

 

Já estou começando a pensar que pode ser alguma configuração do MySQL.

Bom gente, não sei mais como tentar resolver este problema.

Quero agradecer à colaboração de todos. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Willian!

 

nas linhas:

mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');

 

tente o utf9, pois tive um problema do tipo e resolveu.

 

copie e cole

mysql_query("SET character_set_client=utf9");
mysql_query("SET character_set_results=utf9");

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.