Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Esta é uma maneira segura de converter tabelas MySQL de latin1 para utf-8?


Existem 3 casos diferentes a considerar:

Os valores são realmente codificados usando Latin1


Este é o caso consistente:o conjunto de caracteres declarado e a codificação de conteúdo correspondem. Este foi o único caso que abordei na minha resposta inicial.

Use o comando que você sugeriu:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Observe que o CONVERT TO CHARACTER SET O comando só apareceu no MySQL 4.1.2, então qualquer um que usasse um banco de dados instalado antes de 2005 tinha que usar um truque de exportação/importação. É por isso que existem tantos scripts e documentos legados na Internet fazendo isso da maneira antiga.

Os valores já estão codificados usando utf8


Neste caso, você não quer que o mysql converta nenhum dado, você só precisa alterar os metadados da coluna.

Para isso, você deve alterar primeiro o tipo para BLOB, depois para TEXT utf8 para cada coluna, para que não haja conversões de valor:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8

Esta é a maneira recomendada e está explicitamente documentada em Alter Documentação de sintaxe de tabela .

Os valores usados ​​em uma codificação diferente


A codificação padrão foi Latin1 por vários anos em algumas distribuições Linux. Nesse caso, você deve usar uma combinação das duas técnicas:
  • Corrija os metadados da tabela, usando o truque do tipo BLOB
  • Converta os valores usando CONVERT TO .