Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL त्रुटि 1170 (42000):BLOB/TEXT कॉलम बिना कुंजी लंबाई के कुंजी विशिष्टता में प्रयुक्त

एक नई तालिका बनाते समय या प्राथमिक कुंजी, अद्वितीय बाधाओं और अनुक्रमणिका के साथ मौजूदा तालिका को बदलते समय, या MySQL डेटाबेस में ऑल्टर टेबल मैनिपुलेशन स्टेटमेंट के साथ एक नई अनुक्रमणिका को परिभाषित करते समय, निम्न त्रुटि हो सकती है और कमांड को पूरा करने से रोक सकती है:

<ब्लॉकक्वॉट>

त्रुटि 1170 (42000):BLOB/TEXT कॉलम 'field_name' बिना कुंजी लंबाई के कुंजी विनिर्देश में उपयोग किया जाता है

त्रुटि इसलिए होती है क्योंकि MySQL किसी BLOB या TEXT कॉलम के केवल पहले N वर्णों को अनुक्रमित कर सकता है। तो त्रुटि मुख्य रूप से तब होती है जब टेक्स्ट या बीएलओबी का कोई फ़ील्ड/कॉलम प्रकार होता है या वे टेक्स्ट या बीएलओबी प्रकार से संबंधित होते हैं जैसे टिनीब्लॉब, मेडियमब्लॉब, लोंगब्लॉब, टिनीटेक्स्ट, मेडियमटेक्स्ट, और लॉन्गटेक्स्ट जिसे आप प्राथमिक कुंजी या इंडेक्स के रूप में बनाने का प्रयास करते हैं। लंबाई मान के बिना पूर्ण BLOB या TEXT के साथ, MySQL स्तंभ की विशिष्टता की गारंटी देने में असमर्थ है क्योंकि यह चर और गतिशील आकार का है। इसलिए, इंडेक्स के रूप में BLOB या TEXT प्रकारों का उपयोग करते समय, N का मान दिया जाना चाहिए ताकि MySQL कुंजी लंबाई निर्धारित कर सके। हालाँकि, MySQL TEXT या BLOB पर सीमा का समर्थन नहीं करता है। TEXT(88) बस काम नहीं करेगा।

जब आप तालिका कॉलम को गैर-पाठ और गैर-ब्लॉब प्रकार जैसे VARCHAR और ENUM से टेक्स्ट या बीएलओबी प्रकार में कनवर्ट करने का प्रयास करते हैं, तो त्रुटि भी पॉप अप हो जाएगी, कॉलम को पहले से ही अद्वितीय बाधाओं या अनुक्रमणिका के रूप में परिभाषित किया गया है। तालिका बदलें SQL आदेश विफल हो जाएगा।

समस्या का समाधान इंडेक्स या अद्वितीय बाधा से टेक्स्ट या बीएलओबी कॉलम को हटाना है, या किसी अन्य फ़ील्ड को प्राथमिक कुंजी के रूप में सेट करना है। यदि आप ऐसा नहीं कर सकते हैं, और टेक्स्ट या बीएलओबी कॉलम पर एक सीमा रखना चाहते हैं, तो VARCHAR प्रकार का उपयोग करने का प्रयास करें और उस पर लंबाई की सीमा रखें। डिफ़ॉल्ट रूप से, VARCHAR अधिकतम 255 वर्णों तक सीमित है और इसकी सीमा को इसकी घोषणा के ठीक बाद एक ब्रैकेट के भीतर स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए, अर्थात VARCHAR (200) इसे केवल 200 वर्णों तक सीमित कर देगा।

कभी-कभी, भले ही आप अपनी तालिका में टेक्स्ट या बीएलओबी संबंधित प्रकार का उपयोग नहीं करते हैं, त्रुटि 1170 भी प्रकट हो सकती है। ऐसा तब होता है जब आप VARCHAR कॉलम को प्राथमिक कुंजी के रूप में निर्दिष्ट करते हैं, लेकिन गलत तरीके से इसकी लंबाई या वर्ण आकार सेट करते हैं। VARCHAR केवल 256 वर्णों को स्वीकार कर सकता है, इसलिए VARCHAR (512) जैसी कोई भी चीज़ MySQL को VARCHAR (512) को एक SMALLTEXT डेटाटाइप में ऑटो-कन्वर्ट करने के लिए बाध्य करेगी, जो बाद में मुख्य लंबाई पर त्रुटि 1170 के साथ विफल हो जाती है यदि कॉलम को प्राथमिक के रूप में उपयोग किया जाता है कुंजी या अद्वितीय या गैर-अद्वितीय अनुक्रमणिका। इस समस्या को हल करने के लिए, VARCHAR फ़ील्ड के आकार के रूप में 256 से कम का आंकड़ा निर्दिष्ट करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या हम JDBC का उपयोग करके Android में दूरस्थ MySQL डेटाबेस को कनेक्ट कर सकते हैं?

  2. MySQL - दो तिथियों के बीच डेटाबेस से डेटा का चयन करें

  3. MySQL वर्कबेंच का उपयोग करके एक MySQL डेटाबेस को रिवर्स इंजीनियरिंग करें

  4. #1139 - regexp . से त्रुटि 'पुनरावृत्ति-संचालक संकार्य अमान्य' मिला

  5. PHP का उपयोग करके MySQL से कैसे कनेक्ट करें