Le vrai problème est probablement d'utiliser VARCHAR
pour la colonne des empreintes digitales. Lors de l'utilisation de l'encodage de caractères utf8, MySQL applique le "pire scénario" et compte 3 octets par caractère.
Changez cela en codage à 1 octet (par exemple Latin1), ou utilisez le VARBINARY
tapez plutôt :
create table fingerprinted_entry
( type varchar (128) not null,
fingerprint varbinary (512) not null,
PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here
Si vous devez dépasser la limite de 767 octets par préfixe, vous devrez explicitement indiquez que lorsque vous créez l'index :
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