Codificação de Caracteres no MySQL e PHP/HTML
30 de September de 2009É incrível como o pessoal ainda tem muita dúvida em relação à codificação utilizada em sites e/ou sistemas em PHP que utilizem MySQL como banco de dados. Geralmente ao criar um banco de dados MySQL deixamos as codificações padrão do phpmyadmin. O problema é que mesmo utilizando nas páginas HTML/PHP o UTF-8, os navegadores ainda mostram dados truncados ao se fazer consultas de dados no banco.
Como não poderia ser diferente, há tempos procuro por uma solução que resolva meus problemas em relação a isso e hoje, ao iniciar o desenvolvimento de um novo sistema, me deparei com este problema novamente.
No meu banco de dados, a tabela está com a seguinte configuração:
Bom, a primeira coisa que fiz foi alterar a codificação do firefox que estava também em UTF-8 para ISO-8851-9. Porém isso resolveu o problema com o banco de dados mas me trouxe o mesmo problema com o restante do texto.
A segunda tentativa foi direto ao banco de dados e tentar encontrar outra codificação. Pesquisei no nosso amigo GOOGLE e encontrei posts de outros blogs e fóruns dizendo que a codificação deveria ser essa:
Character set: UTF-8 Unicode
Collation: latin1_general_ci
Fiz essa alteração na tabela envolvida, mas nada resolveu. Foi aí que alterei a minha busca no Google para “codificação mysql php” e encontrei três ótimas referências ao mesmo problema.
No blog do Willian Vieira (http://willianvieira.wordpress.com) o autor sugeriu a seguinte alternativa:
function abreconexao() {
$dbname = "inventario";
$usuario = "inventario";
$password = "123abc";
$id = mysql_connect("localhost", $usuario, $password);
$con = mysql_select_db($dbname, $id);
mysql_query("SET NAMES utf8",$id);
return ($id);
}
Como o sistema não está orientado a objetos, não utilizei essa função, mas sabia que a linha 09 era a minha solução. No sistema, a conexão com o banco de dados está em um arquivo chamado conectadb.php, o qual está incluso no arquivo head.php que, por sua vez, está incluso na página principal do sistema. Sendo assim, teria apenas que adicionar a linha 09 no meu arquivo de conexão, ficando assim:
$host = "localhost";
$usuario = "user_banco_sistema";
$senha = "aaabbb1112222";
$nome_banco = "banco_sistema";
if (!($conexao = @mysql_connect("$host","$usuario","$senha")))
{
echo "<p align="center">Erro conectando ao MYSQL!</p>";
exit;
}
if (!($nome_banco=@mysql_select_db("$nome_banco",$conexao))) {
echo "<p align="center">Erro selecionando a base de dados<strong> $nome_banco </strong></p>";
exit;
}
mysql_query("SET NAMES utf8",$conexao);
?>
E…. EUREKAAAA!!!! Tudo certo com a codificação. Claro que voltei ao normal as configurações da tabela do banco de dados e também do firefox. Para quem quiser dar uma olhada, os blogs que encontrei a referência são estes:
>> Willian Vieira – http://willianvieira.wordpress.com/2008/09/18/codificao-utf-8-em-mysql-e-php-2/
>> Alberane Lúcio – http://alberane.wordpress.com/2008/02/14/problemas-com-uft-8-e-iso8859-1-em-phpmysql/
>> WeBr T.I. – http://weber.eti.br/2009/04/28/erro-mysql-codificacao-caracteres-banco/
Espero ter ajudado mais uma vez… Se gostaram do post, comentem.












Sem Comentários para Codificação de Caracteres no MySQL e PHP/HTML
Comentários