असली मुद्दा शायद VARCHAR
. का उपयोग करना है फिंगरप्रिंट कॉलम के लिए। Utf8 वर्ण एन्कोडिंग का उपयोग करते समय, MySQL "सबसे खराब स्थिति" को लागू करता है और प्रति वर्ण 3 बाइट्स की गणना करता है।
या तो इसे 1-बाइट एन्कोडिंग में बदलें (जैसे लैटिन1 कहें), या 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