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

Como alterar o agrupamento de todas as linhas de latin1_swedish_ci para utf8_unicode_ci?


Se as colunas estiverem usando o conjunto de caracteres de tabela padrão, será apenas uma consulta por tabela para converter:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Se o conjunto de caracteres for definido individualmente em cada coluna, AFAIK não há como fazer isso em todas as colunas de todas as tabelas do banco de dados diretamente no MySql, mas você pode escrever um pequeno programa em sua linguagem de escolha que faça isso.

Seu programa consultaria o INFORMATION_SCHEMA.COLUMNS tabela e veja o CHARACTER_SET_NAME coluna:
SELECT * FROM `INFORMATION_SCHEMA.COLUMNS`
WHERE TABLE_SCHEMA = 'dbname' AND CHARACTER_SET_NAME = 'latin1'

Para cada linha de resultado é trivial sintetizar e executar um ALTER TABLE consulta no local que altera o conjunto de caracteres e o agrupamento adequadamente:
ALTER TABLE t MODIFY col TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Na consulta acima t , col e TEXT seriam os valores da TABLE_NAME , COLUMN_NAME e DATA_TYPE colunas do INFORMATION_SCHEMA.COLUMNS conjunto de resultados.