Skutečným problémem je pravděpodobně použití VARCHAR
pro sloupec otisků prstů. Při použití kódování znaků utf8 MySQL vynucuje "nejhorší scénář" a počítá 3 bajty na znak.
Buď to změňte na 1bajtové kódování (řekněme Latin1), nebo použijte VARBINARY
zadejte místo toho:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Pokud musíte překročit limit 767 bajtů na prefix, budete muset explicitně uveďte, že při vytváření indexu:
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