Prawdziwym problemem jest prawdopodobnie użycie VARCHAR
dla kolumny odcisków palców. Używając kodowania znaków utf8, MySQL wymusza „najgorszy scenariusz” i liczy 3 bajty na znak.
Zmień to na kodowanie 1-bajtowe (powiedzmy Latin1) lub użyj VARBINARY
zamiast tego wpisz:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Jeśli musisz przekroczyć limit 767 bajtów na prefiks, będziesz musiał wyraźnie powiedz, że podczas tworzenia indeksu:
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