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.