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

Alteração na codificação de caracteres do MySQL. A integridade dos dados é preservada?


Cada (tipo string de caracteres) coluna tem o seu próprio conjunto de caracteres e metadados de agrupamento.

Se, quando a coluna 's foi especificado (ou seja, quando foi criado ou alterado pela última vez), nenhum conjunto de caracteres/agrupamento foi fornecido explicitamente, então o conjunto de caracteres padrão da tabela e agrupamento seriam usados ​​para a coluna.

Se, quando a tabela foi especificado, nenhum conjunto/agrupamento de caracteres padrão foi fornecido explicitamente, então o conjunto de caracteres padrão do banco de dados e o agrupamento seriam usados ​​para o padrão da tabela.

Os comandos que você cita em sua pergunta apenas alteram esses conjuntos/agrupamentos de caracteres padrão para o banco de dados e a tabela, respectivamente. Em outras palavras, eles afetarão apenas as tabelas e colunas que forem criadas posteriormente - eles não afetam colunas (ou dados) existentes.

Para atualizar os dados existentes, você deve primeiro ler o Mudando o conjunto de caracteres seção da página de manual em ALTER TABLE :

Para alterar apenas o padrão conjunto de caracteres para uma tabela, use esta instrução:
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

A palavra DEFAULT é opcional. O conjunto de caracteres padrão é o conjunto de caracteres usado se você não especificar o conjunto de caracteres para colunas que adicionar a uma tabela posteriormente (por exemplo, com ALTER TABLE ... ADD column ).

Quando o foreign_key_checks a variável do sistema estiver habilitada, que é a configuração padrão, a conversão do conjunto de caracteres não é permitida em tabelas que incluem uma coluna de cadeia de caracteres usada em uma restrição de chave estrangeira. A solução alternativa é desativar foreign_key_checks antes de realizar a conversão do conjunto de caracteres. Você deve realizar a conversão em ambas as tabelas envolvidas na restrição de chave estrangeira antes de reativar foreign_key_checks . Se você reativar foreign_key_checks depois de converter apenas uma das tabelas, um ON DELETE CASCADE ou ON UPDATE CASCADE operação pode corromper dados na tabela de referência devido à conversão implícita que ocorre durante essas operações (Bug #45290, Bug #74816).