Lidando com UTF-8 com o PHP e MySQL
Crie uma tabela com o conjunto de caracteres UTF-8, como no exemplo abaixo.
Se você preferir, crie antes um banco de dados em UTF-8, exemplo:
Para fazer operações em seu banco de dados, será necessário que crie um arquivo que o início dele seja semelhante a este:
Lembre-se de incluir a seguinte meta entre a tag <head> e </head>:
Exemplo:
CREATE TABLE document (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
unicodeText VARCHAR(45) NOT NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci;
Se você preferir, crie antes um banco de dados em UTF-8, exemplo:
CREATE DATABASE `banco` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Para fazer operações em seu banco de dados, será necessário que crie um arquivo que o início dele seja semelhante a este:
<?php
# Informa qual o conjunto de caracteres será usado.
header('Content-Type: text/html; charset=utf-8');
# Conecta ao banco de dados
$conexao = mysql_connect('localhost','usuario','senha');
$banco = mysql_select_db('banco');
# Aqui está o segredo
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');
?>
Lembre-se de incluir a seguinte meta entre a tag <head> e </head>:
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
Exemplo:
<!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">
<head>
<title>Título da página</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<p>Conteúdo da página</p>
</body>
</html>
Rafael Almeida,
Parabéns pelo artigo, tenho tido problema com isso a algum tempo e nunca achei algo que funcionasse, ou não entendia o que lia, mas esse seu artigo me ajudou muito.
Obrigado.
Parabéns pelo artigo, tenho tido problema com isso a algum tempo e nunca achei algo que funcionasse, ou não entendia o que lia, mas esse seu artigo me ajudou muito.
Obrigado.
16/07/2009 3:10pm
(~1 ano atrás)
Valeu queridão pelo post, MAS.. em vez disso, configura no conf do mysql que é mais fácil né ;)
[]s brother.. bom post!
[]s brother.. bom post!
07/05/2009 5:33pm
(~1 ano atrás)
Se o seu banco de dados mysql por alguma razão dos infernos (ou está num servidor shared) e não consegue inserir dados em UTF-8 talvez seja útil essas linhas após vc fazer a conexão.
$conx = mysql_connect(xxxxxxx);
// dica para shared hosting
mysql_query("SET CHARACTER SET utf8");
//mysql_query("SET NAMES utf8");
//mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); // medida extrema, opcional
$conx = mysql_connect(xxxxxxx);
// dica para shared hosting
mysql_query("SET CHARACTER SET utf8");
//mysql_query("SET NAMES utf8");
//mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); // medida extrema, opcional
02/05/2009 11:16pm
(~1 ano atrás)
Seria interessante publicar um artigo nesta mesma linha que falasse de como trabalhar com migracao de bancos de dados mysql com versoes diferentes.
02/05/2009 6:39am
(~1 ano atrás)
Bom artigo e vai aqui mais uma dica também: se por acaso tiver que usar um banco de dados latin1 (ou que não seja UTF8) há 2 funções do PHP que são úteis:
- utf8_encode($string)
- utf8_decode($string)
elas codificam e decodificam dados para/de utf8
Alex
- utf8_encode($string)
- utf8_decode($string)
elas codificam e decodificam dados para/de utf8
Alex
09/04/2009 6:49pm
(~1 ano atrás)
Eu tinha esse problema TODA HORA, com apenas meta charset: urf-8!!
Depois que eu vi esse artigo, graça a deus, não tenho mais problema.
Esse é importante.
Muito Obrigado!!
Depois que eu vi esse artigo, graça a deus, não tenho mais problema.
Esse é importante.
Muito Obrigado!!
02/04/2009 7:13am
(~1 ano atrás)
Carlos Sica,
Eu fui redundante, mas caso eu não coloque a meta no cabeçalho HTML, o validador do W3C irá dizer que a página não é um XHTML 1.0 Strict válido.
Obrigado por seu comentário.
Eu fui redundante, mas caso eu não coloque a meta no cabeçalho HTML, o validador do W3C irá dizer que a página não é um XHTML 1.0 Strict válido.
Obrigado por seu comentário.
29/03/2009 3:29am
(~1 ano atrás)
Caro Rafael, acho que as duas linhas abaixo tem a mesma função e efeito, apenas a primeira está em PHP e a segunda em HTML:
header('Content-Type: text/html; charset=utf-8');
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
concorda?
header('Content-Type: text/html; charset=utf-8');
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
concorda?
27/03/2009 12:48pm
(~1 ano atrás)
Tenho cometido erros e acredito que agora vou fazer da forma correta. Deus abençoe a comunidade!
04/02/2009 7:02am
(~1 ano atrás)



É o seguinte:
Tenho meu BD todo em utf8_unicode_ci. Na exibição de dados ele exibe bem, td certo mas, qndo eu cadastro alguma coisa, os carcteres depois dos acentos somem, ex: Música - fica assim: M, saúde - fica: sa.
O que será?