मेरा मानना है कि इसका उत्तर यह है कि Oracle बहुत, बहुत पुराना है।
पुराने दिनों में वापस SQL मानक होने से पहले, Oracle ने डिज़ाइन निर्णय लिया था कि VARCHAR
में रिक्त स्ट्रिंग्स /VARCHAR2
कॉलम थे NULL
और यह कि NULL का केवल एक ही अर्थ था (ऐसे संबंधपरक सिद्धांतकार हैं जो डेटा के बीच अंतर करते हैं जिसके लिए कभी संकेत नहीं दिया गया है, डेटा जहां उत्तर मौजूद है लेकिन उपयोगकर्ता द्वारा ज्ञात नहीं है, डेटा जहां कोई जवाब नहीं है, आदि। सभी जो NULL
. का कुछ अर्थ बनाते हैं )।
जब तक SQL मानक आ गया और सहमत हो गया कि NULL
और खाली स्ट्रिंग अलग-अलग इकाइयाँ थीं, पहले से ही Oracle उपयोगकर्ता थे जिनके पास कोड था जो मानता था कि दोनों समान थे। तो ओरेकल मूल रूप से मौजूदा कोड को तोड़ने, एसक्यूएल मानक का उल्लंघन करने, या किसी प्रकार के प्रारंभिक पैरामीटर को पेश करने के विकल्पों के साथ छोड़ दिया गया था जो संभावित रूप से बड़ी संख्या में प्रश्नों की कार्यक्षमता को बदल देगा। SQL मानक (IMHO) का उल्लंघन इन तीन विकल्पों में सबसे कम विघटनकारी था।
Oracle ने इस संभावना को खुला छोड़ दिया है कि VARCHAR
SQL मानक का पालन करने के लिए भविष्य के रिलीज़ में डेटा प्रकार बदल जाएगा (यही कारण है कि हर कोई VARCHAR2
का उपयोग करता है Oracle में चूंकि उस डेटा प्रकार का व्यवहार आगे भी वैसा ही रहने की गारंटी है)।