El problema real es probablemente usar VARCHAR
para la columna de huellas dactilares. Cuando se usa la codificación de caracteres utf8, MySQL impone el "peor de los casos" y cuenta 3 bytes por carácter.
Cambie eso a codificación de 1 byte (digamos Latin1), o use VARBINARY
escriba en su lugar:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Si tiene que ir más allá del límite de 767 bytes por prefijo, tendrá que explícitamente indique que cuando cree el í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