O AliSQL oferece suporte ao recurso Instant Modify Column Charset. Esse recurso altera apenas os metadados e evita a reconstrução da tabela, o que reduz significativamente o tempo da operação e aumenta a eficiência.
Visão geral do recurso
Contexto: No MySQL Community, a implementação padrão do conjunto de caracteres UTF-8 é utf8mb3. Como esse conjunto usa no máximo três bytes por caractere, ocorre perda de dados ao armazenar caracteres de quatro bytes, como emojis. Embora o MySQL Community tenha alterado seu conjunto de caracteres padrão para utf8mb4 a partir da versão 8.0, modificar o conjunto de caracteres de colunas em tabelas existentes geralmente ainda exige uma reconstrução demorada da tabela.
Visão geral: O AliSQL oferece suporte ao recurso Instant Modify Column Charset. Em vez de reconstruir a tabela — processo que envolve criar uma tabela temporária e copiar dados —, esse recurso modifica apenas os metadados. Assim, a alteração do conjunto de caracteres é concluída em segundos.
Algoritmo: Ambos os algoritmos concluem a operação modificando apenas metadados. Ao usar o recurso Instant Modify Column Charset, o MySQL 5.7 suporta apenas o algoritmo INPLACE. Já o MySQL 8.0 suporta os algoritmos INPLACE e INSTANT.
Pré-requisitos
Para utilizar o recurso Instant Modify Column Charset, sua instância deve atender a um dos seguintes requisitos de versão do banco de dados. Caso a versão secundária do mecanismo não atenda ao requisito, atualize a versão secundária do mecanismo.
MySQL 8.4
MySQL 8.0: versão secundária do mecanismo 20230630 ou posterior.
MySQL 5.7: versão secundária do mecanismo 20251031 ou posterior.
O MySQL 8.0 (versão secundária do mecanismo 20230630 ou posterior) e o MySQL 8.4 suportam os algoritmos INPLACE e INSTANT. O MySQL 8.0 com versão secundária do mecanismo anterior a 20230630 suporta apenas o algoritmo INPLACE.
O recurso Instant Modify Column Charset apresenta as seguintes limitações:
Tipo de coluna: A conversão do conjunto de caracteres é permitida apenas para colunas
CHAReVARCHAR.Conjunto de caracteres: Somente conversões de
utf8/utf8mb3parautf8mb4são suportadas.Mecanismo de armazenamento: Apenas o mecanismo
InnoDBé suportado.Colunas indexadas: Não é possível modificar uma coluna indexada.
Chaves de partição: Não é possível modificar uma coluna que faça parte de uma chave de partição.
-
Comprimento da coluna: A modificação não deve fazer com que o comprimento máximo de armazenamento da coluna ultrapasse o limite de 256 bytes. O comprimento deve permanecer inteiramente abaixo de 256 bytes ou inteiramente igual ou superior a 256 bytes. Para uma conversão de
utf8/utf8mb3parautf8mb4:No conjunto de caracteres
utf8/utfbmb3, que utiliza 3 bytes por caractere, o limite de 256 bytes corresponde a 85 caracteres.No conjunto de caracteres
utf8mb4, que utiliza 4 bytes por caractere, o limite de 256 bytes corresponde a 63 caracteres.

Portanto, o recurso Instant Modify Column Charset é suportado apenas quando o comprimento definido da coluna (em caracteres) está dentro do intervalo (0, 63] ou (85, 65535].
Gerenciamento de parâmetros
Parâmetros
Modifique os parâmetros a seguir apenas se você usar o MySQL 8.0 e precisar especificar o algoritmo INSTANT**:
Parâmetro | Descrição |
|
|
|
|
Modificar parâmetros
Acesse a página Instances. Na barra de navegação superior, selecione a região onde a instância RDS está localizada. Em seguida, localize a instância RDS e clique em ID da instância.
No painel de navegação à esquerda, clique em Parameter Settings.
Na aba Editable Parameters, pesquise o parâmetro desejado e altere seu valor.
Clique em OK e, em seguida, clique em Submit Parameters. Na caixa de diálogo exibida, especifique quando os novos valores dos parâmetros entrarão em vigor.
Procedimento
Este procedimento utiliza como exemplo a tabela t1 com o seguinte esquema:
CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` char(10) DEFAULT NULL,
`c2` varchar(10) DEFAULT NULL,
`c3` char(100) DEFAULT NULL,
`c4` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Especificar um algoritmo
Especifique o algoritmo INPLACE ou INSTANT ao modificar o conjunto de caracteres da coluna.
Algoritmo Inplace
-- Specify the INPLACE algorithm to modify the character set of the c1 and c2 columns to utf8mb4.
ALTER TABLE `t1` MODIFY `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INPLACE;
ALTER TABLE `t1` MODIFY `c2` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INPLACE;
-- View the result.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL,
`c2` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL,
`c3` char(100) DEFAULT NULL,
`c4` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Algoritmo Instant
-- Specify the INSTANT algorithm to modify the character set of the c3 and c4 columns to utf8mb4.
ALTER TABLE `t1` MODIFY `c3` char(100) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INSTANT;
ALTER TABLE `t1` MODIFY `c4` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL, ALGORITHM=INSTANT;
-- View the result.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`c1` char(10) CHARACTER DEFAULT NULL,
`c2` varchar(10) CHARACTER DEFAULT NULL,
`c3` char(100) CHARACTER SET utf8mb4 DEFAULT NULL,
`c4` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Seleção automática de algoritmo
Se nenhum algoritmo for especificado, o MySQL selecionará automaticamente o mais adequado.
-- Modify the character set of the c1 column to utf8mb4 without specifying an algorithm.
ALTER TABLE `t1` MODIFY `c1` char(10) CHARACTER SET utf8mb4 DEFAULT NULL;