जवाबों:
आइए मान लें कि डेटाबेस कैरेक्टर सेट UTF-8 है, जो कि Oracle के हाल के संस्करणों में अनुशंसित सेटिंग है। इस स्थिति में, कुछ वर्ण डेटाबेस में संग्रहीत करने के लिए 1 से अधिक बाइट लेते हैं।
यदि आप फ़ील्ड को इस रूप में परिभाषित करते हैं VARCHAR2(11 BYTE)
, तो Oracle स्टोरेज के लिए 11 बाइट्स का उपयोग कर सकता है, लेकिन आप वास्तव में फ़ील्ड में 11 वर्णों को संग्रहीत करने में सक्षम नहीं हो सकते हैं, क्योंकि उनमें से कुछ स्टोर करने के लिए एक से अधिक बाइट लेते हैं, जैसे गैर-अंग्रेज़ी वर्ण।
फ़ील्ड को परिभाषित करने के रूप में VARCHAR2(11 CHAR)
आप ओरेकल को बताते हैं कि यह 11 वर्णों को संग्रहीत करने के लिए पर्याप्त स्थान का उपयोग कर सकता है, चाहे वह प्रत्येक को संग्रहीत करने के लिए कितने बाइट्स लेता हो। एक एकल वर्ण को 4 बाइट तक की आवश्यकता हो सकती है।
एक में 11 बाइट्स के लिए बिल्कुल जगह है, दूसरे में ठीक 11 अक्षरों के लिए। यूनिकोड वेरिएंट जैसे कुछ चार्ट्स प्रति चार्ट एक से अधिक बाइट का उपयोग कर सकते हैं, इसलिए 11 बाइट फ़ील्ड में एन्कोडिंग के आधार पर 11 से कम चार्ट के लिए स्थान हो सकता है।
Http://www.joelonsoftware.com/articles/Unicode.html भी देखें
मुझे यकीन नहीं है क्योंकि मैं ओरेकल उपयोगकर्ता नहीं हूं, लेकिन मुझे लगता है कि जब आप यूनिकोड (यूटीएफ -16 / 32) जैसे मल्टी-बाइट कैरेक्टर सेट का उपयोग करते हैं तो यह अंतर निहित है। इस स्थिति में, 11 बाइट्स में 11 से कम अक्षर हो सकते हैं।
साथ ही उन फ़ील्ड प्रकारों का उच्चारण पात्रों या मामले के संबंध में अलग तरह से किया जा सकता है, उदाहरण के लिए 'बाइनरीफिल्ड (ete) = "été" का मिलान नहीं होगा जबकि' charField (ete) = "été" '(फिर से Oracle के बारे में निश्चित नहीं है)' ।
VARCHAR2
।VARCHAR2(4000 CHAR)
यदि वर्णों में से कुछ को एकाधिक बाइट्स की आवश्यकता होती है, तो 4000 से कम वर्णों की घोषणा करने की अनुमति होगी।