Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Modificação instantânea do conjunto de caracteres da coluna

Última atualização: Jul 08, 2026

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.

Nota

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 CHAR e VARCHAR.

  • Conjunto de caracteres: Somente conversões de utf8/utf8mb3 para utf8mb4 sã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/utf8mb3 para utf8mb4:

    • 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.

    image

    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

loose_rds_upgrade_datatype_instant_enable

  • Descrição: Controla o recurso de modificação instantânea do tipo de coluna.

  • Escopo: parâmetro global.

  • Tipo de dados: Boolean.

  • Valor padrão: OFF.

  • Valores válidos: ON ou OFF.

  • Reinicialização necessária: Não.

loose_innodb_instant_ddl_enabled

  • Descrição: Controla operações de DDL instantâneo.

  • Escopo: parâmetro global.

  • Tipo de dados: Boolean.

  • Valor padrão: ON.

  • Valores válidos: ON ou OFF.

  • Reinicialização necessária: Não.

Modificar parâmetros

  1. 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.

  2. No painel de navegação à esquerda, clique em Parameter Settings.

  3. Na aba Editable Parameters, pesquise o parâmetro desejado e altere seu valor.

  4. 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;