O problema real é provavelmente usar
VARCHAR
para a coluna de impressão digital. Ao usar a codificação de caracteres utf8, o MySQL impõe o "pior cenário" e conta 3 bytes por caractere. Altere isso para codificação de 1 byte (digamos, Latin1) ou use o
VARBINARY
digite em vez disso:create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Se você precisar ir além do limite de 767 bytes por prefixo, terá que explicitamente afirme que quando você cria o índice:
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