Jump to content
Rui Carlos

Base de dados Latin1 com dados em UTF8: como corrigir o encoding?

Recommended Posts

Rui Carlos

Tenho o seguinte problema: tenho bases de dados que foram criadas com o encoding default do MySQL (Latin1), mas em que a aplicação que usava a BD trabalhava com UTF8. Ou seja, foram introduzidos dados codificados em UTF8 na BD em Latin1.

Isto não é muito problemático, e a aplicação até não costuma dar problemas. Só que agora estou a fazer a migração das aplicações/BDs, e está a ser uma valente dor de cabeça... É que não consigo acertar com os encodings... Eu lembro-me que já consegui fazer uma migração bem sucedida apesar deste problema, ao fim de tentar dezenas de métodos diferentes. Mas agora não encontro forma de o fazer.

Basicamente precisava de migrar a BD, de modo a que a aplicação fique a funcionar. Como extra, também era porreiro conseguir configurar o encoding correctamente, mas dava-me por contente se conseguisse fazer a migração sem ficar com problemas de encoding na aplicação.

Share this post


Link to post
Share on other sites
Rui Carlos

Parece que à n-ésima tentativa lá funcionou alguma coisa... Usei os seguintes comandos:

mysqldump  -u <user> -p --default-character-set=latin1 --skip-set-charset <bd1> > dump.sql
mysql -u <user> -p --default-character-set utf8 <bd2> < dump.sql

Isto apenas me permitiu importar os dados na nova BD de modo a que a aplicação funcione. No entanto, continuo com a BD configurada em Latin1 com dados em UTF8.

Pelo que estive a ver, para corrigir o encoding, terei que ir coluna a coluna, alterar primeiro para o tipo BLOB e depois voltar a alterar para texto com o encoding correcto, o que não é lá muito prático (visto que numa das BDs teria centenas de colunas para corrigir)...

Share this post


Link to post
Share on other sites
brunoais

Estás a fazer a migração através de exportação para um ficheiro e, depois, importação, estás a fazer através de uma aplicação (por exemplo, feita em php, como o phpmyadmin ou qq outra aplicação que tenhas feito) ou estás a fazer usando comunicação directa entre as duas DB?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
brunoais

O que eu tentava fazer era usar uma aplicação intermédia, por exemplo, PHP e fazer 1 ligação à 1 DB usando o default e uma ligação à 2ª usando o modo utf8.

Senão, podes tentar obter o dump para ficheiro, depois converter o conteúdo do ficheiro para utf-8 e executar o SQL no outro servidor. Acho que dá para fazer isso a partir da terminal.

Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Rui Carlos

Usar o PHP não me parece muito prático, visto que tenho várias BDs, com dezenas de tabelas.

Já consegui a parte de criar um dump correcto, em UTF8 (ver segundo post). Agora as tabelas ainda são criadas novamente em Latin1 (com dados UTF8). Possivelmente se editasse o dump removendo as definições do encoding nos CREATE TABLE resolvia o problema, mas ainda não arrisquei fazer isto, pois seria complicado validar o resultado. O ideal era mesmo que o MySQL me deixasse mudar o encoding das tabelas sem mexer na informação...

Share this post


Link to post
Share on other sites
brunoais

Isso dá, podes mudar o encoding, o problema é exactamente isso... a informação n muda :S.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
brunoais

@Rui Carlos já está resolvido?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Rui Carlos

Estou no ponto em que estava no segundo post.

A migração está feita, e está a funcionar, mas continuo com a BD com a meta-informação sobre encodings errada. Penso que o único problema que isso pode trazer é nas pesquisas de texto, o que não é grave, daí ter optado por não arriscar mexer nos CREATE TABLE do dump (que devia permitir resolver o problema da meta-informação).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.