Changements SQL — Général : byteLength correctement définie pour les colonnes de chaînes VARCHAR (En attente)

Attention

Ce changement de comportement est présent dans le bundle 2026_03.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Ce changement de comportement corrige le calcul de la longueur d’octets pour les colonnes VARCHAR pour toujours prendre en compte l’encodage UTF-8 (4 octets par caractère). Avant cette correction, les colonnes VARCHAR dont la longueur de caractères était supérieure à 4 194 304 et allant jusqu’à 16 777 216 pouvaient avoir des longueurs d’octets calculées de manière incorrecte.

Avant la modification:

Pour les colonnes VARCHAR avec une longueur de caractères > 4,194,304 and <= 16,777,216, the byteLength était incorrectement plafonnée à 16 777 216 octets. Celle-ci ne tenait pas correctement compte de l’encodage UTF-8, qui nécessite jusqu’à 4 octets par caractère.

Par exemple :

CREATE TABLE example_table (
  col1 VARCHAR(10000000) -- 10M characters
);
SHOW COLUMNS IN TABLE example_table;

Résultat :

{
  "length": 10000000,
  "byteLength": 16777216
}

La byteLength devrait être 40 000 000 (4 x 10 000 000), mais a été incorrectement plafonnée à 16 777 216.

Après la modification:

Pour les colonnes VARCHAR avec une longueur de caractères> 4,194,304 and <= 16,777,216, the byteLength est correctement calculée en tant que 4 x character_length, en tenant correctement compte de l’encodage UTF-8 où chaque caractère peut comporter jusqu’à 4 octets.

En utilisant le même exemple :

{
  "length": 10000000,
  "byteLength": 40000000
}

Cette modification n’affecte que les nouvelles colonnes de chaînes. Les colonnes de chaînes avec une longueur de caractères > 16,777,216 are not affected because byteLength is already correctly set for those cases. The byteLength est toujours plafonnée à 134 217 728.

Réf : 2286