Vấn đề thực sự có lẽ là sử dụng VARCHAR
cho cột dấu vân tay. Khi sử dụng mã hóa ký tự utf8, MySQL thực thi "trường hợp xấu nhất" và đếm 3 byte cho mỗi ký tự.
Thay đổi mã đó thành mã hóa 1 byte (ví dụ như Latin1) hoặc sử dụng VARBINARY
thay vào đó gõ:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Nếu bạn phải vượt quá giới hạn 767 byte cho mỗi tiền tố, bạn sẽ phải rõ ràng nói rằng khi bạn tạo chỉ mục:
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