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