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 Edition, a implementação padrão do conjunto de caracteres UTF-8 é utf8mb3. Como o conjunto de caracteres utf8mb3 utiliza no máximo três bytes por caractere, ocorre perda de dados ao armazenar caracteres de quatro bytes, como emojis. Embora o MySQL Community Edition 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 ainda exige, na maioria dos casos, 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 os 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: Apenas conversões de
utf8/utf8mb3parautf8mb4são suportadas.Mecanismo de armazenamento: Somente o mecanismo
InnoDBé compatível.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 pode fazer com que o comprimento máximo de armazenamento da coluna ultrapasse o limite de 256 bytes. O tamanho deve permanecer totalmente abaixo de 256 bytes ou totalmente igual ou superior a 256 bytes. Para uma conversão de
utf8/utf8mb3parautf8mb4:No conjunto de caracteres
utf8/utfbmb3, que usa 3 bytes por caractere, o limiar de 256 bytes corresponde a 85 caracteres.No conjunto de caracteres
utf8mb4, que usa 4 bytes por caractere, o limiar 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 reside a instância RDS. 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 que deseja modificar 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
É possível especificar 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;