Masalah sebenarnya mungkin menggunakan VARCHAR
untuk kolom sidik jari. Saat menggunakan pengkodean karakter utf8, MySQL memberlakukan "skenario kasus terburuk" dan menghitung 3 byte per karakter.
Ubah itu menjadi penyandian 1-byte (katakanlah Latin1), atau gunakan VARBINARY
ketik sebagai gantinya:
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Jika Anda harus melampaui batas 767 byte per awalan, Anda harus secara eksplisit nyatakan bahwa ketika Anda membuat indeks:
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