Det verkliga problemet är förmodligen att använda VARCHAR
för fingeravtryckskolumnen. När du använder utf8-teckenkodningen upprätthåller MySQL "värsta scenariot" och räknar 3 byte per tecken.
Ändra det till 1-byte-kodning (säg Latin1) eller använd VARBINARY
skriv istället:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Om du måste överskrida gränsen på 767 byte per prefix, måste du explicit ange att när du skapar indexet:
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