MySQL संस्करण 5.6 में 767 बाइट्स (और पूर्व संस्करण), उपसर्ग सीमा बताई गई InnoDB तालिकाओं के लिए। यह माईसाम टेबल के लिए 1,000 बाइट लंबा है। MySQL संस्करण 5.7 में यह सीमा बढ़ाकर 3072 बाइट्स कर दी गई है (और ऊपर)।
आपको इस बात का भी ध्यान रखना होगा कि अगर आप किसी इंडेक्स को बड़े चार या varchar
. पर सेट करते हैं फ़ील्ड जो utf8mb4
. है एन्कोड किया गया है, तो आपको 767 बाइट्स (या 3072 बाइट्स) की अधिकतम अनुक्रमणिका उपसर्ग लंबाई को 4 से विभाजित करना होगा जिसके परिणामस्वरूप 191 . ऐसा इसलिए है क्योंकि utf8mb4
. की अधिकतम लंबाई चरित्र चार बाइट्स है। utf8
. के लिए वर्ण यह तीन बाइट्स होगा जिसके परिणामस्वरूप अधिकतम अनुक्रमणिका उपसर्ग लंबाई 255 . होगी (या शून्य से शून्य-टर्मिनेटर, 254 वर्ण)।
आपके पास एक विकल्प यह है कि आप अपने VARCHAR
. पर केवल निचली सीमा लगाएं फ़ील्ड।
दूसरा विकल्प (इस मुद्दे पर प्रतिक्रिया के अनुसार ) पूरी राशि के बजाय कॉलम का सबसेट प्राप्त करना है, अर्थात:
ALTER TABLE `mytable` ADD UNIQUE ( column1(15), column2(200) );
ट्वीक करें क्योंकि आपको आवेदन करने के लिए कुंजी प्राप्त करने की आवश्यकता है, लेकिन मुझे आश्चर्य है कि क्या यह इस इकाई के संबंध में आपके डेटा मॉडल की समीक्षा करने के लायक होगा, यह देखने के लिए कि क्या सुधार संभव है, जो आपको MySQL सीमा को हिट किए बिना इच्छित व्यावसायिक नियमों को लागू करने की अनुमति देगा। ।