Il vero problema è probabilmente usare VARCHAR
per la colonna dell'impronta digitale. Quando si utilizza la codifica dei caratteri utf8, MySQL applica lo "scenario peggiore" e conta 3 byte per carattere.
Cambialo in codifica a 1 byte (diciamo Latin1) o usa il VARBINARY
digita invece:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Se devi superare il limite di 767 byte per prefisso, dovrai esplicitamente dichiaralo quando crei l'indice:
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