AliSQL es compatible con la función Instant Modify Column Charset. Esta función modifica únicamente los metadatos y evita la reconstrucción de la tabla, lo que reduce de forma significativa el tiempo de operación y mejora la eficiencia.
Descripción general de la función
Contexto: En MySQL de la comunidad, la implementación predeterminada del juego de caracteres UTF-8 es utf8mb3. Dado que utf8mb3 utiliza un máximo de tres bytes por carácter, se produce pérdida de datos al almacenar caracteres de cuatro bytes, como los emojis. Aunque a partir de la versión 8.0 MySQL cambió su juego de caracteres predeterminado a utf8mb4, modificar el juego de caracteres de las columnas en tablas existentes sigue requiriendo una reconstrucción de tabla que consume mucho tiempo.
Descripción general: AliSQL es compatible con la función Instant Modify Column Charset. En lugar de reconstruir la tabla, proceso que implica crear una tabla temporal y copiar los datos, esta función modifica únicamente los metadatos. Esto permite completar el cambio de juego de caracteres en segundos.
Algoritmo: Ambos algoritmos completan la operación modificando solo los metadatos. Al usar la función Instant Modify Column Charset, MySQL 5.7 admite únicamente el algoritmo INPLACE. MySQL 8.0 es compatible con los algoritmos INPLACE y INSTANT.
Requisitos previos
Para utilizar la función Instant Modify Column Charset, la instancia debe cumplir con uno de los siguientes requisitos de versión de base de datos. Si la versión secundaria del motor no cumple con el requisito, puede upgrade the minor engine version.
MySQL 8.4
MySQL 8.0: versión secundaria del motor 20230630 o posterior.
MySQL 5.7: versión secundaria del motor 20251031 o posterior.
MySQL 8.4 y MySQL 8.0 (con versión secundaria del motor 20230630 o posterior) son compatibles con los algoritmos INPLACE y INSTANT. MySQL 8.0 con una versión secundaria del motor anterior a 20230630 admite únicamente el algoritmo INPLACE.
La función Instant Modify Column Charset presenta las siguientes limitaciones:
Tipo de columna: Solo es posible convertir el juego de caracteres de las columnas
CHARyVARCHAR.Juego de caracteres: Se admiten exclusivamente las conversiones de
utf8/utf8mb3autf8mb4.Motor de almacenamiento: Solo se admite el motor de almacenamiento
InnoDB.Columnas indexadas: No se puede modificar una columna indexada.
Claves de partición: No se puede modificar una columna que forme parte de una clave de partición.
-
Longitud de columna: La modificación no debe provocar que la longitud máxima de almacenamiento de la columna cruce el límite de 256 bytes. La longitud debe mantenerse por completo por debajo de 256 bytes o bien igual o por encima de ese valor. Para una conversión de
utf8/utf8mb3autf8mb4:En el juego de caracteres
utf8/utfbmb3, que usa 3 bytes por carácter, el umbral de 256 bytes equivale a 85 caracteres.En el juego de caracteres
utf8mb4, que usa 4 bytes por carácter, el umbral de 256 bytes equivale a 63 caracteres.

Por lo tanto, la función Instant Modify Column Charset solo es compatible cuando la longitud definida de la columna (en caracteres) se encuentra dentro de los rangos (0, 63] u (85, 65535].
Gestión de parámetros
Parámetros
Modifique los siguientes parámetros únicamente si utiliza MySQL 8.0 y necesita especificar el algoritmo INSTANT****:
Parámetro | Descripción |
|
|
|
|
Modificar parámetros
Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside la instancia RDS. A continuación, busque la instancia RDS y haga clic en su identificador.
En el panel de navegación izquierdo, haga clic en Parameter Settings.
En la pestaña Editable Parameters, busque el parámetro que desea modificar y cambie su valor.
Haga clic en OK y luego en Submit Parameters. En el cuadro de diálogo que aparece, especifique cuándo entrarán en vigor los nuevos valores de los parámetros.
Procedimiento
Este procedimiento utiliza como ejemplo la tabla t1, que tiene el siguiente 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 un algoritmo
Al modificar el juego de caracteres de una columna, puede especificar el algoritmo INPLACE o INSTANT.
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)
Selección automática del algoritmo
Si no especifica ningún algoritmo, MySQL selecciona automáticamente el más adecuado.
-- 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;