स्वीकृत उत्तर गलत है (या कम से कम सुंदर राय) - मैं व्यक्तिगत रूप से अपने डेटाबेस के बाहर संग्रहीत डेटा नहीं चाहता, क्योंकि यह बैकअप प्रक्रियाओं और लेनदेन संबंधी प्रश्नों के संदर्भ में जटिलताएं पैदा करता है।
जैसा कि अन्य ने इंगित किया है, मैनुअल बार-बार कहता है कि बीएलओबी और टेक्स्ट कॉलम कुल पंक्ति-आकार की ओर नहीं गिने जाते हैं, लेकिन दुर्भाग्य से, डिफ़ॉल्ट कॉन्फ़िगरेशन सेटिंग्स के साथ, यह सच नहीं है, और आपको यह त्रुटि-संदेश मिल रहा है। (त्रुटि-संदेश का कोई मतलब नहीं है, क्योंकि यह आपको समस्या का समाधान करने के लिए VARCHAR के बजाय TEXT का उपयोग करने के लिए कह रहा है - जो आप पहले से ही हैं।)
इस सीमा का कारण डिफ़ॉल्ट भंडारण तंत्र है, Antelopeए> , जो पंक्ति में चर-लंबाई वाले कॉलम के पहले 768 बाइट्स को स्टोर करता है - और एक संभावित समाधान है INNODB का उपयोग करना और अपने स्टोरेज मैकेनिज्म को वैकल्पिक बाराकुडा भंडारण तंत्र:
SET GLOBAL innodb_file_format=Barracuda;
इसका कोई तत्काल प्रभाव नहीं होगा, क्योंकि यह सेटिंग नई डेटाबेस फ़ाइलों के लिए एक डिफ़ॉल्ट है - इसलिए आपको अपने संपूर्ण डेटाबेस को छोड़ने और फिर से बनाने की आवश्यकता होगी।
वैकल्पिक रूप से, बाराकुडा (ऊपर के रूप में) पर स्विच करें और फिर (इसके अलावा) फ़ाइल-प्रति-तालिका रणनीति पर स्विच करें:
SET GLOBAL innodb_file_per_table=ON;
दोबारा, इसका कोई तत्काल प्रभाव नहीं होगा, क्योंकि दोनों सेटिंग्स नई तालिकाओं के लिए डिफ़ॉल्ट हैं - इसलिए फिर से, आपको तालिका को छोड़ने और फिर से बनाने की आवश्यकता होगी।
यदि आप ऐसा करने के बाद MySQL डेटा फ़ोल्डर में देखते हैं, तो आप पुष्टि कर सकते हैं कि अलग फ़ाइलें बनाई गई थीं, उदा। "डेटा" नामक डेटाबेस और "टेस्ट" नामक तालिका के लिए, आपको "डेटा/टेस्ट/बिगटेबल.आईबीडी" नाम की एक फ़ाइल देखनी चाहिए।
यदि आप MySQL में वैश्विक सेटिंग्स को बदलना पसंद नहीं करते हैं, तो SET SESSION
try आज़माएं इसके बजाय SET GLOBAL
, जैसे अपना CREATE TABLE
running चलाने से ठीक पहले बयान।