É 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.
Nenhum post relacionado.






Muito boa a dica!
Tava quebrando a cabeça aqui também, e uma linha de código resolveu tudo.
Abraços!
Eita hora q vi o print do navicat ate axei q era o print do meu igualzim ja tinha trocado a codificação de tudo esse artigo me ajudou bastante mais tem um errinho vc diz q é linha 9 mais na verdade é linha 7 =D
Cara parabens… na empresa não tenho esse problema… mas como eu ja montei um padrão para os sistemas lah… ta traquilo… (outro programador fez essa parte, ai ele me falo como arrumar, e eu sempre esqueço) mas nota 10 ai vlw msm
Ok, Jonathan. Obrigado pelo comentário! É bom saber que pude ajudar.
Mano, você é um monstro! Cara, eu tava com o mesmo problema e você resolveu com uma simples linha de código.
Tá certo que a linha de código “pertence” a outra pessoa, mas você teve a paciência para fazer a busca e postar em seu site.
Obrigado! Valeu mesmo!
hehe… Vlew Jairo, pela visita!
Abs.