Alterações no SQL – Geral: Definição correta de byteLength para colunas de cadeia de caracteres VARCHAR (pendente)

Atenção

Essa alteração de comportamento faz parte do pacote 2026_03.

Para saber o status atual do pacote, consulte Histórico do pacote.

Essa alteração de comportamento corrige o cálculo do comprimento em bytes para colunas VARCHAR para levar em conta consistentemente a codificação UTF-8 (4 bytes por caractere). Antes dessa correção, colunas VARCHAR com comprimentos de caracteres maiores que 4.194.304 e até 16.777.216 podiam ter comprimentos em bytes calculados incorretamente.

Antes da mudança:

Para colunas VARCHAR com comprimento de caractere > 4,194,304 and <= 16,777,216, the byteLength, o valor era limitado incorretamente a 16.777.216 bytes. Isso não levava em conta corretamente a codificação UTF-8, que requer até 4 bytes por caractere.

Por exemplo:

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

Resultado:

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

O valor de byteLength deveria ser 40.000.000 (4 x 10.000.000), mas era limitado incorretamente a 16.777.216.

Após a mudança:

Para colunas VARCHAR com comprimento de caractere > 4,194,304 and <= 16,777,216, the byteLength é 4 vezes character_length, levando em consideração a codificação UTF-8, em que cada caractere pode ter até 4 bytes.

Usando o mesmo exemplo:

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

Essa alteração afeta apenas novas colunas de cadeia de caracteres. Colunas de cadeia de caracteres com comprimento de caractere > 16,777,216 are not affected because byteLength is already correctly set for those cases. The byteLength ainda está limitado a 134.217.728.

Ref: 2286