MySQL में एक तालिका बनाते समय, VARCHAR प्रकार के कॉलम की लंबाई स्पष्ट रूप से निर्धारित की जानी चाहिए। हालाँकि, TEXT प्रकार के लिए, लंबाई निर्दिष्ट करने की आवश्यकता नहीं है। तो VARCHAR और TEXT में क्या अंतर है?
TEXT
VARCHAR(M)
TEXT की निश्चित अधिकतम लंबाई 2¹⁶-1 = 65535 वर्ण है, जबकि VARCHAR की अधिकतम लंबाई परिवर्तनशील है, 2¹⁶-1 तक। इसलिए, टेक्स्ट का आकार चयन योग्य नहीं है, लेकिन VARCHAR का है।
एक और अंतर यह है कि टेक्स्ट कॉलम पर इंडेक्स (पूर्ण-पाठ इंडेक्स को छोड़कर) की अनुमति नहीं है। इसलिए, इस कॉलम को अनुक्रमित करने के लिए, आपको VARCHAR का उपयोग करना होगा। लेकिन कृपया ध्यान दें कि सूचकांक की लंबाई भी सीमित है। यदि VARCHAR कॉलम बहुत लंबा है, तो सूचकांक केवल VARCHAR कॉलम के पहले कुछ वर्णों का उपयोग कर सकता है (CREATE INDEX दस्तावेज़ देखें)।
VARCHAR का भी उपयोग किया जाना चाहिए यदि आप जानते हैं कि संभावित इनपुट स्ट्रिंग की अधिकतम लंबाई केवल एम है, जैसे फ़ोन नंबर या नाम। फिर, आप TINYTEXT या TEXT के बजाय VARCHAR(30) का उपयोग कर सकते हैं, ताकि यदि कोई आपके द्वारा फ़ोन नंबर संग्रहीत करने के लिए उपयोग किए जाने वाले कॉलम में लॉर्ड ऑफ़ द रिंग्स टेक्स्ट को सहेजने का प्रयास करे, तो भी आपको केवल पहले 30 अक्षर संग्रहीत करने होंगे: )
संपादित करें:यदि डेटाबेस में संग्रहीत किया जाने वाला पाठ 65535 वर्णों से अधिक लंबा है, तो आपको MEDIUMTEXT का चयन करना होगा या लंबा टेक्स्ट, लेकिन सावधान रहें: संग्रहीत अधिकतम स्ट्रिंग लंबाई मीडियमटेक्स्ट के लिए 16 एमबी और लंबे टेक्स्ट के लिए 4 जीबी है। यदि आप LONGTEXT का उपयोग करते हैं और PHP के माध्यम से डेटा प्राप्त करते हैं (कम से कम यदि आप mysqli का उपयोग कर रहे हैं और store_result फ़ंक्शन का उपयोग नहीं कर रहे हैं), तो आपको मेमोरी आवंटन त्रुटि मिल सकती है क्योंकि PHP यह सुनिश्चित करने के लिए 4 जीबी मेमोरी आवंटित करने का प्रयास करेगा कि पूरी स्ट्रिंग हो सके बफ़र किया जाए. ऐसा PHP के अलावा अन्य भाषाओं में भी हो सकता है।
हालांकि, आपको डेटाबेस में डेटा संग्रहीत करने से पहले हमेशा इनपुट की जांच करनी चाहिए (क्या यह बहुत लंबा है? क्या इसमें अजीब कोड है?)। कृपया ध्यान दें: दोनों प्रकारों के लिए, आवश्यक डिस्क स्थान केवल संग्रहीत स्ट्रिंग की लंबाई पर निर्भर करता है, अधिकतम लंबाई पर नहीं। उदाहरण के लिए, यदि आप कैरेक्टर सेट लैटिन1 का उपयोग करते हैं और टेक्स्ट "टेस्ट" को VARCHAR(30), VARCHAR(100), और TINYTEXT में स्टोर करते हैं, तो इसके लिए हमेशा 5 बाइट्स की आवश्यकता होगी (स्ट्रिंग की लंबाई को स्टोर करने के लिए 1 बाइट, प्रत्येक कैरेक्टर 1 बाइट) . यदि आप उसी टेक्स्ट को VARCHAR(2000) या TEXT कॉलम में संग्रहीत करते हैं, तो उसे भी समान स्थान की आवश्यकता होगी, लेकिन इस मामले में इसमें 6 बाइट्स लगेंगे (स्ट्रिंग की लंबाई को स्टोर करने के लिए 2 बाइट्स, प्रति वर्ण 1 शब्द फेस्टिवल)।
अधिक जानकारी के लिए दस्तावेज़ देखें।
अंत में, मैं जोड़ना चाहूंगा कि टेक्स्ट और VARCHAR दोनों परिवर्तनीय-लंबाई डेटा प्रकार हैं, इसलिए वे डेटा को संग्रहीत करने के लिए आवश्यक रिक्त स्थानों की संख्या को कम कर देंगे
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3