Das eigentliche Problem ist wahrscheinlich die Verwendung von VARCHAR
für die Fingerabdruckspalte. Bei Verwendung der utf8-Zeichenkodierung erzwingt MySQL das „Worst-Case-Szenario“ und zählt 3 Bytes pro Zeichen.
Ändern Sie dies entweder in eine 1-Byte-Codierung (z. B. Latin1) oder verwenden Sie VARBINARY
geben Sie stattdessen ein:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Wenn Sie die 767-Byte-Grenze pro Präfix überschreiten müssen, müssen Sie dies explizit tun Geben Sie Folgendes an, wenn Sie den Index erstellen:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (2048) not null, -- 2048 bytes
PRIMARY KEY(type, fingerprint(767))) ENGINE InnoDB; -- only the first 767 bytes of fingerprint are stored in the index