AliSQL prend en charge la fonctionnalité Instant Modify Column Charset. Cette fonctionnalité modifie uniquement les métadonnées et évite ainsi la reconstruction de la table. Elle réduit considérablement le temps d'exécution et améliore l'efficacité.
Présentation de la fonctionnalité
Contexte : Dans la version communautaire de MySQL, l'implémentation par défaut du jeu de caractères UTF-8 est utf8mb3. Étant donné que le jeu de caractères utf8mb3 utilise un maximum de trois octets par caractère, toute tentative de stockage de caractères sur quatre octets (tels que les emojis) entraîne une perte de données. Bien que la version communautaire de MySQL ait adopté utf8mb4 comme jeu de caractères par défaut à partir de la version 8.0, la modification du jeu de caractères des colonnes dans les tables existantes nécessite généralement une reconstruction longue de la table.
Aperçu : AliSQL prend en charge la fonctionnalité Instant Modify Column Charset. Au lieu de reconstruire la table (ce qui implique la création d'une table temporaire et la copie des données), cette fonctionnalité modifie uniquement les métadonnées. La modification du jeu de caractères s'effectue ainsi en quelques secondes.
Algorithme : Les deux algorithmes réalisent l'opération en modifiant uniquement les métadonnées. Lorsque vous utilisez la fonctionnalité Instant Modify Column Charset, MySQL 5.7 prend en charge uniquement l'algorithme INPLACE. MySQL 8.0 prend en charge à la fois les algorithmes INPLACE et INSTANT.
Prérequis
Pour utiliser la fonctionnalité Instant Modify Column Charset, votre instance doit répondre à l'une des exigences de version de base de données suivantes. Si la version mineure du moteur ne satisfait pas à l'exigence, mettez à niveau la version mineure du moteur.
MySQL 8.4
MySQL 8.0 : version mineure du moteur 20230630 ou ultérieure.
MySQL 5.7 : version mineure du moteur 20251031 ou ultérieure.
MySQL 8.0 (version mineure du moteur 20230630 ou ultérieure) et MySQL 8.4 prennent en charge à la fois les algorithmes INPLACE et INSTANT. MySQL 8.0 (avec une version mineure du moteur antérieure à 20230630) prend en charge uniquement l'algorithme INPLACE.
La fonctionnalité Instant Modify Column Charset présente les limitations suivantes :
Type de colonne : Vous pouvez convertir le jeu de caractères uniquement pour les colonnes
CHARetVARCHAR.Jeu de caractères : Seules les conversions de
utf8/utf8mb3versutf8mb4sont prises en charge.Moteur de stockage : Seul le moteur de stockage
InnoDBest pris en charge.Colonnes indexées : Vous ne pouvez pas modifier une colonne indexée.
Clés de partition : Vous ne pouvez pas modifier une colonne faisant partie d'une clé de partition.
-
Longueur de colonne : La modification ne doit pas entraîner le franchissement de la limite de 256 octets par la longueur de stockage maximale de la colonne. La longueur doit rester soit entièrement inférieure à 256 octets, soit entièrement supérieure ou égale à 256 octets. Pour une conversion de
utf8/utf8mb3versutf8mb4:Pour le jeu de caractères
utf8/utfbmb3, qui utilise 3 octets par caractère, le seuil de 256 octets correspond à 85 caractères.Pour le jeu de caractères
utf8mb4, qui utilise 4 octets par caractère, le seuil de 256 octets correspond à 63 caractères.

Par conséquent, la fonctionnalité Instant Modify Column Charset est prise en charge uniquement lorsque la longueur définie de la colonne (en caractères) se situe dans la plage (0, 63] ou (85, 65535].
Gestion des paramètres
Paramètres
Modifiez les paramètres suivants uniquement si vous utilisez MySQL 8.0 et devez spécifier l'algorithme INSTANT :
Paramètre | Description |
|
|
|
|
Modifier les paramètres
Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside l'instance RDS. Recherchez ensuite l'instance RDS et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Parameter Settings.
Dans l'onglet Editable Parameters, recherchez le paramètre à modifier et changez sa valeur.
Cliquez sur OK, puis sur Submit Parameters. Dans la boîte de dialogue qui s'affiche, spécifiez le moment où les nouvelles valeurs des paramètres prendront effet.
Procédure
Cette procédure utilise une table d'exemple t1 avec le schéma suivant :
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;
Spécifier un algorithme
Vous pouvez spécifier l'algorithme INPLACE ou INSTANT lors de la modification du jeu de caractères de la colonne.
Algorithme 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)
Algorithme 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)
Sélection automatique de l'algorithme
Si vous ne spécifiez pas d'algorithme, MySQL sélectionne automatiquement le plus approprié.
-- 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;