सामान्य नियम CHAR . चुनना है यदि सभी पंक्तियों की समान लंबाई . के करीब होगी . VARCHAR चुनें (या NVARCHAR ) जब लंबाई बदलती है उल्लेखनीय रूप से। CHAR थोड़ा तेज़ भी हो सकता है क्योंकि सभी पंक्तियाँ समान लंबाई की हैं।
यह डीबी कार्यान्वयन से भिन्न होता है, लेकिन आम तौर पर, VARCHAR (या NVARCHAR ) वास्तविक डेटा के अतिरिक्त भंडारण के एक या दो और बाइट्स (लंबाई या समाप्ति के लिए) का उपयोग करता है। तो (यह मानते हुए कि आप एक-बाइट वर्ण सेट का उपयोग कर रहे हैं) "FooBar" शब्द को संग्रहीत करना
- चार(6) =6 बाइट्स (कोई ओवरहेड नहीं)
- VARCHAR(100) =8 बाइट्स (2 बाइट्स ओवरहेड)
- चार(10) =10 बाइट्स (4 बाइट्स अपशिष्ट)
निचली पंक्ति CHAR . है कर सकते हैं तेज़ बनें और अधिक अंतरिक्ष-कुशल अपेक्षाकृत समान लंबाई के डेटा के लिए (दो वर्णों की लंबाई के अंतर के भीतर)।
नोट :Microsoft SQL में VARCHAR के लिए 2 बाइट्स ओवरहेड हैं। यह डीबी से डीबी में भिन्न हो सकता है, लेकिन आम तौर पर, VARCHAR पर लंबाई या ईओएल इंगित करने के लिए कम से कम 1 बाइट ओवरहेड की आवश्यकता होती है।
जैसा कि गेवेन . द्वारा बताया गया था टिप्पणियों में:जब मल्टी-बाइट वर्ण सेट की बात आती है तो चीजें बदल जाती हैं, और यह एक ऐसा मामला है जहां VARCHAR एक बेहतर विकल्प बन जाता है।
VARCHAR . की घोषित लंबाई के बारे में एक नोट :क्योंकि यह वास्तविक सामग्री की लंबाई को संग्रहीत करता है, तो आप अप्रयुक्त लंबाई को बर्बाद नहीं करते हैं। तो VARCHAR(6), VARCHAR(100), या . में 6 वर्णों को संग्रहित करना वचर (मैक्स) भंडारण की समान मात्रा का उपयोग करता है। VARCHAR(MAX) का उपयोग करते समय अंतरों के बारे में और पढ़ें। आप एक अधिकतम . घोषित करते हैं VARCHAR में आकार सीमित करने के लिए कितना संग्रहीत किया जाता है।
टिप्पणियों में ऑलवेज लर्निंग ने बताया कि माइक्रोसॉफ्ट ट्रांजैक्ट-एसक्यूएल डॉक्स इसके विपरीत कहते हैं। मेरा सुझाव है कि यह एक त्रुटि है या कम से कम दस्तावेज़ अस्पष्ट हैं।