本当の問題はおそらく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