UTF-8 como PHP e MySQL

Retirado de Surreal Art Web

Percebi que os sites da grande e poderosa Google, e outros também grandes como YAHOO! trabalham com a codificação UTF-8, mas pensei com meus botões… Porque?
Descobri que o UTF-8 tem o maior suporte a caracteres em relação aos outros, até porque trabalha de uma forma binária.
Então mandei logo o famoso:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Resultado? Ainda tive problemas.

Então fui pesquisar novamente e descobri a saída.

Pensei em passar absolutamente tudo para UTF-8. Mas a pergunta era… O que é este tudo?

Aprendi que os sistemas de arquivos dos sistemas operacionais trabalham também com codificação. Ubuntu em ext3 por exemplo também trabalha com o UTF-8.

Ou seja, quando criamos um arquivo, ele é criado com o charset padrão do sistema. O Windows possui um próprio, então achei uma opção interessante no notepad++, converter para utf-8 (SEM BOM) (Formatar > Converter para UTF-8 (SEM BOM), então ele irá salvar o arquivo na codificação UTF-8. 🙂
Simples, o arquivo já está em UTF-8 e o que faço no PHP?
Insiro no inicio da página esse cabeçalho:

header(‘Content-type: text/html; charset=”utf-8″‘,true);

Mas somente isso não basta, as tabelas do banco de dados também devem estar em UTF-8, crie o banco de dados em utf8_bin, e verá que todas as tabelas que não forem definidas um charset e um collation, irão automaticamente ficar com utf8_bin nos campos de texto.
Mas não para por ai, ainda tem que definir a codificação da conexão com o banco de dados.

Se você usa uma conexão simples, um mysql_set_charset(’utf8′) funciona, no caso de quem usa mysqli (como eu), você irá iniciar sua variável $mysqli e observar o seguinte objeto: $mysqli->set_charset(’utf8′)

Meu arquivo de conexão ficou assim:

<?
# Efetuando a conexão com o banco de dados
$mysqli= new mysqli(’localhost’, ‘root’, ’senha’,'nome_banco’);
# Selecionando charset de conexão
$mysqli->set_charset(’utf8′);
?>

Bom, para simplificar verifique sempre os passos seguintes:

1. Charset e collation do banco de dados e das tabelas que nele contém
2. Charset de conexão com o banco de dados
3. Arquivos sempre codificados em UTF-8 (dica é usar o notepad++ ou uma IDE como o Zend)
4. Enviar os cabeçalhos via HTML
5. Enviar os cabeçalhos também via PHP

E claro, não menos importante, verifique como está o seu arquivo .sql que irá importar para o banco de dados, ele também deve estar em utf-8.

Bom, é isso ai, desculpem talvez algum erro de português ou se não foi “entendível” o suficiente, mas estou postando as 1:26am, hehe, vejo muitas pessoas com esse problema de codificação, então decidi escrever sobre minhas experiências com elas.

NFS com permissão de escrita

Na maquina server instale o nfs-kernel-server.

sudo apt-get install nfs-kernel-server

Exporte o diretorio no /etc/exports:

/root/backup_server *(rw,sync)

Libere para gravação:

sudo chmod 777 /root/backup_server

Na maquina client instale o nfs-common.
Altere /etc/fstab para conectar:

desenv:/root/backup_server /mnt/desenv nfs defaults 0 0

O acesso ao root fica como usuario nogroup:nobody

Pronto!

Recuperar Backup MySQL

Referencia: Guia do Hardware

A forma mais simples de fazer backup do mysql é gravar todos os arquivos no /var/lib/mysql.

sudo /etc/init.d/mysql stop
tar -zcvf mysql.tar.gz /var/lib/mysql/
/etc/init.d/mysql start
fazer o mesmo para o /var/log/mysql

Para recuperar tomar alguns cuidados:

Apos recuperar os arquivos de /var/lib/mysql, usar o chown -R mysql:mysql.

Apos recuperar os arquivos de /var/log/mysql, usar o chown -R mysql:adm

Garantir acesso ao debian-sys-maint com: GRANT ALL PRIVILEGES ON *.* TO ‘debian-sys-maint’@’localhost’ IDENTIFIED BY ‘xxx’, obtida no arquivo /etc/mysql/debian.cnf

Se mudar a versão do Mysql a unica forma e gerar um backup completo em SQL e depois recuperar na nova versão.

# mysqldump –add-drop-table -u root -p -x -e -A > backup.sql

O “-u root -p” especifica o usuário que será usado para acessar o banco de dados. A opção “-x” trava as bases de dados no momento em que cada uma é copiada, evitando qualquer problema de inconsistência, enquanto a “-e” é uma opção de otimização, que permite ao mysqldump combinar argumentos INSERT dentro das tabelas, o que torna tanto o backup quanto a restauração mais rápidos. Finalizando, a opção “-A” especifica um backup completo, de todas as bases de dados.

A opção “–add-drop-table” faz com que ele inclua instruções para que as bases sejam excluídas e recriadas automaticamente durante a restauração, evitando que você precise fazê-lo manualmente.

O backup pode ser então restaurado diretamente usando o comando abaixo:

# mysql -u root -p < backup.sql