MariaDB 版本 > 10.5 中允许的唯一键 > 3072 字节

Unique keys > 3072 bytes allowed in MariaDB versions > 10.5

我在 MariaDB 10.3 中发现了正常的 3072 字节密钥限制,而 运行 这个语句:

ALTER TABLE table1 ADD UNIQUE INDEX idx_my_composite_uniqueai_usr_email_uniq (table2_uuid ASC, table3_uuid ASC, text_column ASC)

给出了预期的错误:

ERROR 1071 (42000) at line 31: Specified key was too long; max key length is 3072 bytes

table1 的 DDL:

CREATE TABLE table1
(
    uuid char(36) CHARACTER SET ascii NOT NULL,
    table2_fk_uuid char(36) CHARACTER SET ascii NOT NULL,
    table3_fk_uuid char(36) CHARACTER SET ascii NOT NULL,
    text_field varchar(1024) DEFAULT NULL,
    PRIMARY KEY (uuid),
    KEY fk_table2_fk_uuid (table2_fk_uuid),
    KEY fk_table3_fk_uuid (table3_fk_uuid),
    CONSTRAINT fk_table1_table2 FOREIGN KEY (table2_uuid) REFERENCES table2 (uuid) ON DELETE NO ACTION ON UPDATE NO ACTION,
    CONSTRAINT fk_table1_table3 FOREIGN KEY (table3_uuid) REFERENCES table3 (uuid) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

我的理解是这个唯一键的总键长是 1024 * 4(因为 text_field 列是 CHARSET=utfmb3)+ 36 * 2 = 4168 字节.

我意识到尽可能缩短 text_field 列宽度是保持在键长度限制内的最佳方法。然而,在理解这一点之前,我将我的 MariaDB 服务器升级到 10.5 和 10.6,并且 ALTER TABLE 命令执行得很好并且密钥已创建。

后面的db版本是否扩大了key限制?我没有在 MariaDB 文档中看到它。如果没有,我还缺少什么?

该限制在 10.4 中被移除。 Release notes 提到它: “可以在 BLOB 或 TEXT 字段上创建唯一索引 (MDEV-371)