Het echte probleem is waarschijnlijk om VARCHAR
. te gebruiken voor de vingerafdrukkolom. Bij gebruik van de utf8-tekencodering, dwingt MySQL het "worst case scenario" af en telt 3 bytes per teken.
Verander dat in 1-byte codering (zeg Latin1), of gebruik de VARBINARY
typ in plaats daarvan:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Als u de limiet van 767 bytes per voorvoegsel moet overschrijden, moet u expliciet vermeld dat wanneer u de index maakt:
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