जब तक आप केवल अधिकतम परिवर्तन में रुचि नहीं रखते, आपका उदाहरण सही नहीं है।
AL32UTF8 एक चर-लंबाई वाला वर्ण सेट है। सामान्य शब्दों में कहें तो, US7ASCII वर्ण सेट में कोई भी वर्ण 1 बाइट लेगा, यूरोपीय वर्णों को आम तौर पर 2 बाइट्स की आवश्यकता होती है, विभिन्न एशियाई भाषा वर्णों के लिए 3 बाइट्स की आवश्यकता होती है, और बहुत ही दुर्लभ वर्णों के लिए 4 बाइट्स की आवश्यकता होती है। वास्तविक रूप से, यदि आप वास्तविक WE8ISO8859P1 डेटा को AL32UTF8 में कनवर्ट करने के बारे में बात कर रहे हैं, तो आप आम तौर पर 1 और 2 के बीच एक रूपांतरण कारक देखेंगे जो कि 2 से 1 के बहुत करीब है। प्रत्येक मान्य WE8ISO8859P1 वर्ण के लिए यूनिकोड मैपिंग को देखे बिना , मुझे आश्चर्य होगा यदि AL32UTF8 वर्ण सेट में 3 या 4 बाइट संग्रहण की आवश्यकता है।
वैश्वीकरण सहायता मार्गदर्शिका में, पर एक अनुभाग है। कैरेक्टर सेट जो आपको बताता है कि कौन से कैरेक्टर सेट सिंगल-बाइट हैं, जो मल्टी-बाइट हैं, और कौन से मल्टी-बाइट कैरेक्टर सेट निश्चित चौड़ाई वाले हैं। लगभग सभी मल्टी-बाइट वर्ण सेट परिवर्तनशील चौड़ाई वाले होते हैं इसलिए आप जिस कारक की तलाश कर रहे हैं वह आपके डेटा पर निर्भर करेगा।
ज्यादातर मामलों में, आप अपने कॉलम को बाइट लम्बाई सेमेन्टिक्स के बजाय कैरेक्टर लम्बाई सेमेन्टिक्स का उपयोग करने के लिए घोषित करने से बेहतर हैं, डेटाबेस को दृश्यों के पीछे कितना डेटा आवंटित करना है। उदाहरण के लिए, यदि आप एक कॉलम घोषित करते हैं
CREATE TABLE foo (
col1 VARCHAR2(10 CHAR)
)
डेटाबेस वर्ण सेट की परवाह किए बिना और उस डेटा को संग्रहीत करने के लिए आवश्यक बाइट्स की वास्तविक संख्या की परवाह किए बिना Oracle 10 वर्णों के भंडारण के लिए स्थान आवंटित करेगा (4000 बाइट्स प्रति VARCHAR2
की सीमा के अधीन) कॉलम)। यह आम तौर पर कॉलम आकार को परिभाषित करना बहुत आसान बनाता है क्योंकि यदि कोई व्यक्ति 10 4-बाइट यूटीएफ -8 वर्णों को एक पंक्ति में फेंकने का निर्णय लेता है तो आपको कॉलम को बड़ा करने की ज़रूरत नहीं है और आपको उपयोगकर्ताओं को यह समझाने की ज़रूरत नहीं है कि कॉलम स्वीकार करेगा भाषा और/या चुने गए विशिष्ट वर्णों के आधार पर वर्णों की विभिन्न संख्याओं के तार।
हालांकि Oracle लोग जो नियमित रूप से वैश्वीकरण से निपटते हैं इसे हतोत्साहित करें , यह प्राथमिकता देते हुए कि जब आप अपने कॉलम घोषित करते हैं या कम से कम इसे केवल सत्र स्तर पर सेट करते हैं, तो आप वर्ण लंबाई शब्दार्थ को स्पष्ट रूप से निर्दिष्ट करते हैं, आप NLS_LENGTH_SEMANTICS
आरंभीकरण पैरामीटर
कारण VARCHAR2(10)
डिफ़ॉल्ट रूप से बाइट लंबाई शब्दार्थ के बजाय वर्ण लंबाई शब्दार्थ का उपयोग करने के लिए (आप अभी भी VARCHAR2(10 BYTE)
निर्दिष्ट कर सकते हैं यदि आप बाइट-लम्बाई शब्दार्थ चाहते हैं)।