iso8859-1 para utf8 - como converter um banco de dados gigante? [RESOLVIDO]

1. iso8859-1 para utf8 - como converter um banco de dados gigante? [RESOLVIDO]

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 29/12/2014 - 21:47h

Olá,

Pretendo mudar o charset do VOL de iso8859-1 para utf8. O banco de dados tem quase 1GB de registros em plain/text. Preciso além de mudar o charset das tabelas, converter os registros existentes.

Alguém já fez alguma migração deste tipo e tem dicas de como fazer?

Estou correndo contra o tempo aqui em outras tarefas, se tiver alguma alma caridosa para poupar meu tempo de pesquisa, vou nem ficar chateado kkk



  


2. MELHOR RESPOSTA

Buckminster
buckminster

(usa Debian)

Enviado em 30/12/2014 - 12:51h

fabio escreveu:

Olá,

Pretendo mudar o charset do VOL de iso8859-1 para utf8. O banco de dados tem quase 1GB de registros em plain/text. Preciso além de mudar o charset das tabelas, converter os registros existentes.

Alguém já fez alguma migração deste tipo e tem dicas de como fazer?

Estou correndo contra o tempo aqui em outras tarefas, se tiver alguma alma caridosa para poupar meu tempo de pesquisa, vou nem ficar chateado kkk


Não esqueça de fazer um backup antes.
http://blog.infolink.com.br/mysql-migrando-uma-base-em-latin1-para-utf8/ <<< esse aqui explica em Português, sendo que a técnica é a mesma dos links abaixo, com poucas variações nos comandos.

Não esqueça de fazer um backup antes.
http://www.rrn.dk/converting-a-mysql-database-from-latin1-to-utf8

Não esqueça de fazer um backup antes.
http://stackoverflow.com/questions/19497066/converting-iso-8859-1-data-to-utf-8-in-utf8-and-latin1-t...

Não esqueça de fazer um backup antes.
http://climbtothestars.org/archives/2004/07/18/converting-mysql-database-contents-to-utf-8/

Não exsqueça de fazer um backup antes.
http://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-...


Não esqueça de fazer um backup antes.
Basicamente a técnica é a mesma que em outros DBs: executar um
dump na base de dados, converter o character set e o collate e
restaurar o banco.


Não esqueça de fazer um backup antes.
Não esqueça de fazer um backup antes.
Não esqueça de fazer um backup antes.

Não testei as opções de todos os links acima (são praticamente
iguais), mas testei o seguinte abaixo no MySql-5.5 em um banco chamado vol
que criei com o default padrão do MySql (latin1, collate latin1_swedish_ci),
duas tabelas e populei com 10.000 registros, tendo por base como eu faço no PostgreSQl,
pois fazia tempo que não trabalhava com o MySql. Fiz no Debian Wheezy, na data de hoje, 30/12/2014.

Fazendo o dump:
# mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B nome_do_banco > dump.sql

Criando uma cópia:
# cp dump.sql dump-convert.sql

Abra a cópia com o VIM:
# vim dump-convert.sql

Em seguida execute os três comandos abaixo dentro do arquivo
aberto com o VIM dando enter após cada comando:

:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci/

:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/

:wq

O primeiro comando substitui todas as ocorrências de latin1
por utf8 com collate utf8_general_ci.
O segundo comando substitui todas as ocorrências de latin1
colocando como padrão utf8, convertendo, assim, todas as
tabelas.
O terceiro comando salva o arquivo (w) e sai (q).

Depois é só fazer o restore:

# mysql -uusername -ppassword < dump-convert.sql
(mysql -uroot -p123456 < dump-convert.sql)

Optei por esse procedimento (tirado do último link), pois
sempre prefiro fazer manualmente, mas a escolha é tua.
Correu tudo certo, não perdi nenhum dado, tinha colunas do tipo
inteiro, varchar, text, date e coloquei um blob também, sendo que correu tudo certo. Acredito que com esse procedimento manual pode ter qualquer tipo de dado.
Os dados que coloquei no blob foram os arquivos binário bash e um arquivo de ícone deneb.desktop.
Nos varchar e text tinha ãoãoãoãoÜÜÜÜçççÇÇÇáéíóú#$%¨&*()#@!?ÊÂ, enfim, quase de tudo junto misturado.
Verifiquei os dados depois tanto manualmente quanto pelo phpMyAdmin.
Fiz esse procedimento duas vezes.

Ps.: Já ía esquecendo, não esqueça de fazer um backup antes.


3. Re: iso8859-1 para utf8 - como converter um banco de dados gigante? [RESOLVIDO]

Fábio Berbert de Paula
fabio

(usa Debian)

Enviado em 30/12/2014 - 16:19h

Obrigado Buck, favoritei o tópico, assim que eu for executar a migração vou acompanhar esse tutorial. A parte tranqueira será abrir um arquivo de quase 1GB de tamanho no Vim, provavelmente eu vá adaptar essa parte usando o sed, que deve rodar bem mais rápido acredito eu.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts