<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alessandro Santos &#187; Guia</title>
	<atom:link href="http://alessandrosantos.com.br/tag/guia/feed/" rel="self" type="application/rss+xml" />
	<link>http://alessandrosantos.com.br</link>
	<description></description>
	<lastBuildDate>Thu, 01 Apr 2010 19:14:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PHP, MySQL e UTF-8 (o guia)</title>
		<link>http://alessandrosantos.com.br/2009/08/18/php-mysql-e-utf-8-o-guia/</link>
		<comments>http://alessandrosantos.com.br/2009/08/18/php-mysql-e-utf-8-o-guia/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 12:12:08 +0000</pubDate>
		<dc:creator>Alessandro Santos</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Byte Order Marker]]></category>
		<category><![CDATA[Charset]]></category>
		<category><![CDATA[Content-Type]]></category>
		<category><![CDATA[Guia]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[Unicode]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://alessandrosantos.com.br/?p=214</guid>
		<description><![CDATA[Trabalhar com UTF-8 no PHP pode dar algumas dores de cabeça pra quem é novo, e até mesmo para alguns mais velhinhos&#8230; O PHP trabalha por padrão com ISO-8859-1, que são os caracteres latinos que estamos acostumados. Entretanto, o UTF-8 tem uma abrangência maior de caracteres e o ideal seria que nos acostumássemos a usar [...]]]></description>
			<content:encoded><![CDATA[<p>Trabalhar com UTF-8 no PHP pode dar algumas dores de cabeça pra quem é novo, e até mesmo para alguns mais velhinhos&#8230; O PHP trabalha por padrão com ISO-8859-1, que são os caracteres latinos que estamos acostumados. Entretanto, o UTF-8 tem uma abrangência maior de caracteres e o ideal seria que nos acostumássemos a usar este charset nas páginas.<br />
Este pequeno tutorial tem como objetivo deixar bem claro quais os passos a se tomar para construir uma aplicação totalmente baseada no charset UTF-8, desde as páginas HTML, passando pelo PHP e por fim no MySQL.<br />
Antes de tudo, aconselho que aprenda a <a href="http://alessandrosantos.com.br/?p=54">criar os seus arquivos utilizando o UTF-8 sem BOM</a>, que evitará dores de cabeça futuras quando estiver trabalhando com cookies, sessões e headers.<br />
O segundo passo é definir, no PHP que o charset dos arquivos que serão gerados terão a codificação UTF-8, com o seguinte código:<br />
<code>&lt;?php<br />
ini_set('default_charset','UTF-8');<br />
?&gt;</code><br />
Só setar o charset no PHP não adianta muito, pois alguns navegadores usam a codificação padrão da região do usuário, a não ser que o seguinte código esteja entre as tags <kbd>&lt;head&gt;</kbd> e <kbd>&lt;/head&gt;</kbd>:<br />
<code>&lt;meta http-equiv="Content-type" content="text/html; charset=UTF-8" /&gt;</code><br />
Com isso, você já pode trabalhar tranquilamente com UTF-8 e PHP sem ter problemas com os caracteres.<br />
Alguns cuidados são necessários quando for trabalhar com o MySQL, entretanto. Vou ensinar como se faz pelo <a href="http://www.phpmyadmin.net/home_page/index.php">PHPMyAdmin</a>, que acredito que todos que começaram a trabalhar com MySQL estão acostumados.<br />
Em primeiro lugar, ao criar o seu banco de dados, já crie usando o collation <kbd>utf8_general_ci</kbd>. Se o banco de dados já tiver um collation definido, não é necessário definir o collation das tabelas, pois elas herdarão o do banco. Mas mesmo assim é bom especificar o charset e collation de cada tabela. Como? Assim:<br />
<code>CREATE TABLE Clientes (<br />
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,<br />
  nome VARCHAR(60) NOT NULL,<br />
  PRIMARY KEY(id)<br />
)<br />
TYPE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;</code><br />
Ok. Nossa tabela está trabalhando com UTF-8 agora. Podemos começar a programar e relaxar porque nossos problemas com charset estão resolvidos, certo?<br />
A resposta é não.<br />
Se você continuar a programar com o sistema assim, os dados do banco serão inseridos e consultados de maneira correta, mas você vai perceber problemas quando tentar fazer buscas com palavras acentuadas insensível a maiúsculas, por exemplo: <kbd>Água</kbd>, <kbd>água</kbd> e <kbd>agua</kbd> serão palavras totalmente diferentes, sem contar que a ordenação de resultados com palavras que começam com letras acentuadas sairá bem bagunçada, coma letra <kbd>Ó</kbd> vindo antes de <kbd>B</kbd>, por exemplo.<br />
Esse é o problema que eu tive e que demorei eras pra descobrir. O banco estava OK, o PHP também, o mesmo com as páginas HTML&#8230; e quando eu inseria algum dado pelo PHPMyAdmin, este era inserido corretamente, o que significava que o problema não era no banco e sim na aplicação.<br />
Depois de meses <small>na verdade foram apenas algumas horas</small> de pesquisa, desconfiei que havia algo na conexão com o MySQL que estava dando esse problema. Fui fuçar no <a href="http://br.php.net">Manual do PHP</a> e encontrei a seguinte solução:<br />
<code>&lt;?php<br />
ini_set('default_charset','UTF-8'); // Para o charset das páginas e<br />
mysql_set_charset('utf8'); // para a conexão com o MySQL<br />
?&gt;</code><br />
Com isso todos os meus problemas foram resolvidos. <small>Na verdade não, pois tive que alterar todos os campos acentuados da tabela&#8230;</small><br />
Dá para usar a função <kbd>mysql_client_encoding</kbd> para identificar o charset da conexão com o MySQL, mas não acho necessário pra quem quer trabalhar diretamente com UTF-8 e não com vários charsets.<br />
Acho que por enquanto é só. Até o próximo semestre! <small>Brincadeira&#8230;</small></p>
]]></content:encoded>
			<wfw:commentRss>http://alessandrosantos.com.br/2009/08/18/php-mysql-e-utf-8-o-guia/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
	</channel>
</rss>

