Pra padronizar meus sistemas, resolvi migrar as bases de LATIN1 pra UTF8. Sei que alguns não vão concordar com minha escolha mas enfim. Segue os passos que eu fiz em um servidor RedHat5 (testei com Debian e funcionou também) com a versão 8.1 do PostgreSQL. Fiz com uma base de em torno de 800Mb.
Recomendo que teste em um ambiente separado antes de aplicar na produção. Use por conta e risco.
Primeiro pare todos os serviços que utilizam o banco (ex. stop no apache, tomcat, jboss) para ninguém (usuários) alterar o banco durante o processo.
Nos comandos abaixo, substitua:
usuario_banco = usuário dono do banco, com permissões de apagar e criar bancos
meu_banco = o banco que vc quer fazer a migração
fazer um backup em texto plano
/usr/bin/pg_dump -i -h localhost -U usuario_banco -F p -D -v -f bancoL.sql meu_banco
aqui está o segredo. Use o software iconv para conversão
iconv -f iso-8859-1 -t utf-8 bancoL.sql > bancoU.sql
abra o arquivo bancoL.sql (de preferencia use o vim pra editar)
e no inicio aí pela linha 7, onde tem “SET client_encoding = ‘LATIN1′;” troque LATIN1 por UTF8
Com banco fazer:
faça um backup é claro
pg_dump -U usuario_banco -i -F c -b -f banco.backup meu_banco
agora apague o banco inteiro
dropdb -h localhost -U usuario_banco meu_banco
crie-o com UTF8
createdb -h localhost -E UTF8 -U usuario_banco meu_banco
e agora restaure o banco “uteéfeoitoado” ![]()
psql -h localhost -U usuario_banco -d meu_banco < bancoU.sql
caso use em seus SQL a função TO_ASCII, com UTF-8 ela não irã funcionar. Veja aqui a alternativa em um post passado que eu fiz.
30/07/2008 às 14:13
Eu estava com esse problema por causa do wordpress, e resolvi a conversão no MySQL usando um arquivo .php que gera um código SQL para ser executado no cliente (PHPMyAdmin).
Se interessar:
http://uninuni.com/convertendo-o-banco-de-dados-do-wordpress-de-latin1-para-utf8/
31/07/2008 às 10:34
é PostgreSQL
mysql != postgresql
15/05/2009 às 12:44
Cara parabens pelo post!