Det virkelige problem er sandsynligvis at bruge VARCHAR
for fingeraftrykskolonnen. Når du bruger utf8-tegnkodningen, håndhæver MySQL "worst case scenario" og tæller 3 bytes pr. tegn.
Skift det enten til 1-byte-kodning (f.eks. Latin1), eller brug VARBINARY
skriv i stedet:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Hvis du skal gå ud over grænsen på 767 byte pr. præfiks, skal du eksplicit angiv, at når du opretter indekset:
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