भंडारण में, VARCHAR(255)
किसी दिए गए पंक्ति पर केवल उस लंबाई को संग्रहीत करने के लिए पर्याप्त स्मार्ट है, CHAR(255)
जिसके विपरीत हमेशा 255 वर्ण संग्रहीत होंगे।
लेकिन जब से आपने MySQL के साथ इस प्रश्न को टैग किया है, मैं एक MySQL-विशिष्ट टिप का उल्लेख करूंगा: चूंकि पंक्तियों को स्टोरेज इंजन लेयर से SQL लेयर में कॉपी किया जाता है, फिक्स्ड-चौड़ाई वाली पंक्तियों के साथ काम करने का लाभ प्राप्त VARCHAR
करने के CHAR
लिए फ़ील्ड्स को कनवर्ट किया जाता है। तो स्मृति में तार आपके घोषित कॉलम की अधिकतम लंबाई तक गद्देदार हो जाते हैं VARCHAR
।
जब आपकी क्वेरी स्पष्ट रूप से एक अस्थायी तालिका उत्पन्न करती है, उदाहरण के लिए छँटाई करते समय या GROUP BY
, यह बहुत सारी मेमोरी का उपयोग कर सकती है। यदि आप VARCHAR(255)
डेटा के लिए बहुत सारे फ़ील्ड का उपयोग करते हैं , जो लंबे समय तक होने की आवश्यकता नहीं है, तो यह अस्थायी तालिका को बहुत बड़ा बना सकता है।
आप यह भी जानना पसंद कर सकते हैं कि इस "पेडिंग आउट" व्यवहार का अर्थ है कि एक स्ट्रिंग जिसे utf8 वर्ण सेट पैड के साथ तीन बाइट्स प्रति वर्ण के लिए घोषित किया गया है, यहां तक कि स्ट्रिंग्स के लिए आप एकल-बाइट सामग्री (जैसे एससीआईआई या लैटिन 1 वर्ण) के साथ स्टोर करते हैं। और इसी तरह utf8mb4 कैरेक्टर सेट से स्ट्रिंग को मेमोरी में चार बाइट्स प्रति कैरेक्टर पैड हो जाता है।
इसलिए VARCHAR(255)
utf8 में "नो ओपिनियन" जैसी शॉर्ट स्ट्रिंग को डिस्क पर 11 बाइट्स लेते हैं (दस लोअर-चारसेट कैरेक्टर, प्लस एक बाइट लंबाई के लिए), लेकिन इसमें 765 बाइट्स मेमोरी में लगते हैं, और इस तरह टेम्पर टेबल या सॉर्ट किए गए परिणाम।
मैंने MySQL उपयोगकर्ताओं की मदद की है, जिन्होंने अनजाने में 1.5GB टेम्प टेबलों को बार-बार बनाया और उनकी डिस्क स्पेस को भर दिया। उनके पास बहुत सारे VARCHAR(255)
स्तंभ थे जो व्यवहार में बहुत कम तारों को संग्रहीत करते थे।
आपके द्वारा संग्रहीत किए जाने वाले डेटा के प्रकार के आधार पर कॉलम को परिभाषित करना सबसे अच्छा है। यह आवेदन-संबंधी बाधाओं को लागू करने के लिए लाभ है, जैसा कि अन्य लोगों ने उल्लेख किया है। लेकिन इसके ऊपर बताए गए मैमोरी वेस्ट से बचने के शारीरिक फायदे हैं।
यह जानना मुश्किल है कि सबसे लंबा डाक पता क्या है, बेशक, यही वजह है कि बहुत से लोग एक लंबा चुनाव करते हैं VARCHAR
जो निश्चित रूप से किसी भी पते से अधिक लंबा है। और 255 प्रथागत है क्योंकि यह एक अधिकतम लंबाई है VARCHAR
जिसके लिए लंबाई को एक बाइट के साथ एन्कोड किया जा सकता है। यह VARCHAR
MySQL में अधिकतम लंबाई 5.0 से अधिक थी।