Истинският проблем вероятно е да използвате VARCHAR
за колоната за пръстови отпечатъци. Когато използва кодирането на символи utf8, MySQL налага "най-лошия сценарий" и отчита 3 байта на знак.
Или променете това на 1-байтово кодиране (да речем Latin1), или използвайте VARBINARY
вместо това въведете:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Ако трябва да надхвърлите ограничението от 767 байта на префикс, ще трябва изрично посочете, че когато създавате индекса:
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