SQL 变更 – 常规:正确设置 VARCHAR 字符串列 byteLength(待定)

注意

此行为变更包含在 2026_03 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

此行为变更修复了 VARCHAR 列的字节长度计算方式,使其能够始终按 UTF-8 编码(每个字符 4 字节)进行计算。在本次修复之前,字符长度大于 4,194,304 且不超过 16,777,216 的 VARCHAR 列可能会出现字节长度计算错误的情况。

变更前:

VARCHAR 列的字符长度 > 4,194,304 and <= 16,777,216, the byteLength 被错误地限制为 16,777,216 字节。这没有正确考虑 UTF-8 编码,每个字符最多需要 4 个字节。

例如:

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

结果:

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

byteLength 应为 40,000,000 (4 x 10,000,000),但错误地将上限设置为了 16,777,216。

变更后:

VARCHAR 列的字符长度 > 4,194,304 and <= 16,777,216, the byteLength 正确计算为 4 x character_length,正确考虑了 UTF-8 编码中每个字符最多可占 4 个字节的情况。

使用相同的示例:

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

此变更仅影响新的字符串列。字符串列的字符长度 > 16,777,216 are not affected because byteLength is already correctly set for those cases. The byteLength 上限仍为 134,217,728。

参考:2286