Ir para conteúdo


- - - - -

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

mysql encoding utf8 latin1

  • Por favor inicie sessão para responder
8 respostas a este tópico

#1 Rui Carlos

Rui Carlos

    Stack Overflow

  • Staff
  • 12192 mensagens

Publicado 27 de Julho de 2013 - 20:06

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.

#2 Rui Carlos

Rui Carlos

    Stack Overflow

  • Staff
  • 12192 mensagens

Publicado 27 de Julho de 2013 - 21:00

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

Código (Bash):
mysqldump  -u .... -p --default-character=latin1 --skip-set-charset ... > dump.sql
mysql -u ... -p --default-character utf8 ... < 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)...

#3 brunoais

brunoais

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 3354 mensagens

Publicado 27 de Julho de 2013 - 23:03

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?

#4 Rui Carlos

Rui Carlos

    Stack Overflow

  • Staff
  • 12192 mensagens

Publicado 27 de Julho de 2013 - 23:27

Para exportar as BDs antigas posso usar phpMyAdmin ou mysqldump.
Para importar estou a usar o MySQL directamente no terminal.

#5 brunoais

brunoais

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 3354 mensagens

Publicado 28 de Julho de 2013 - 09:07

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.

Editado por brunoais, 28 de Julho de 2013 - 09:07.


#6 Rui Carlos

Rui Carlos

    Stack Overflow

  • Staff
  • 12192 mensagens

Publicado 28 de Julho de 2013 - 10:50

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...

#7 brunoais

brunoais

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 3354 mensagens

Publicado 28 de Julho de 2013 - 22:18

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

#8 brunoais

brunoais

    Unsigned User

  • Moderador
  • PipPipPipPipPipPip
  • 3354 mensagens

Publicado 09 de Agosto de 2013 - 16:15

@Rui Carlos já está resolvido?

#9 Rui Carlos

Rui Carlos

    Stack Overflow

  • Staff
  • 12192 mensagens

Publicado 09 de Agosto de 2013 - 17:33

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).