Oracle के VARCHAR और VARCHAR2 डेटाटिप्स में क्या अंतर है?


19

जब अन्य DBMSs से Oracle के लिए आ रहा टेबल पलायन, मानक कार्यों में से एक है सब की जगह VARCHAR(n)के साथ क्षेत्रों VARCHAR2(n)क्षेत्रों (बशर्ते n <= 4000)।

ओरेकल इस डेटाटाइप को क्यों कहता है VARCHAR2और VARCHARअन्य डीबीएमएस की तरह नहीं ?

जवाबों:


26

ऐसा लगता है कि ओरेकल के पास एक समय में VARCHAR2 की तुलना में VARCHAR को एक अलग परिभाषा देने की योजना थी । इसने ग्राहकों को यह बताया है और VARCHAR के उपयोग के खिलाफ सिफारिश की है । जो कुछ भी उनकी योजनाएं थीं, जैसे कि 11.2.0.2 VARCHAR VARCHAR2 के समान हैं । यहाँ SQL भाषा संदर्भ 11g रिलीज़ 2 क्या कहता है:

VARCHAR डेटा प्रकार का उपयोग न करें। इसके बजाय VARCHAR2 डेटा प्रकार का उपयोग करें। हालाँकि, VARCHAR डेटा प्रकार वर्तमान में VARCHAR2 का पर्याय है, VARCHAR डेटा प्रकार को अलग-अलग डेटा प्रकार के रूप में पुनर्परिभाषित करने के लिए निर्धारित किया जाता है, जिसका उपयोग भिन्न-भिन्न तुलनात्मक शब्दार्थों की तुलना में चर-लंबाई के वर्ण तार के लिए किया जाता है।

PL / SQL उपयोगकर्ता मार्गदर्शिका और संदर्भ 10g रिलीज़ 2 डालता है यह इस तरह से:

वर्तमान में, VARCHAR VARCHAR2 का पर्याय है। हालाँकि, पीएल / एसक्यूएल के भविष्य के रिलीज में, उभरते SQL मानकों को समायोजित करने के लिए, VARCHAR अलग तुलनात्मक शब्दार्थ के साथ एक अलग डेटाटाइप बन सकता है। VARCHAR के बजाय VARCHAR2 का उपयोग करना एक अच्छा विचार है।

डाटाबेस अवधारणाओं 10g रिलीज़ 2 दस्तावेज़ कहते हैं मजबूत संदर्भ में एक ही बात:

VARCHAR डेटाटाइप VARCHAR2 डेटाटाइप का पर्याय है। व्यवहार में संभावित परिवर्तनों से बचने के लिए, हमेशा चर-लंबाई वाले वर्ण तार को संग्रहीत करने के लिए VARCHAR2 डेटाटाइप का उपयोग करें।

ओरेकल 9.2 और 8.1.7 प्रलेखन अनिवार्य रूप से एक ही बात कहते हैं, भले ही ओरेकल लगातार VARCHAR के उपयोग को हतोत्साहित करता है , अब तक उन्होंने VARCHAR2 के साथ समानता को बदलने के लिए कुछ भी नहीं किया है ।


मुझे Oracle 8i में varchar2 याद है, लेकिन मुझे यकीन नहीं है कि यह वही varchar था।
बेरंड_क


संकेत हैं कि 8i से पहले कुछ बिंदु पर परिभाषा अलग हो सकती है।
लेह रिफ़ेल

मुझे लगता है varcharकि संस्करण 8 से पहले एक अलग लंबाई सीमा थी , लेकिन मैं इसे वापस करने के लिए कुछ भी सम्मानित नहीं पा सकता हूं और अब आश्चर्य होता है कि क्या यह सिर्फ एक मिथक है।
जैक डगलस

@ जैक डगलस - मैं उस बारे में Oracle 7 प्रलेखन में कुछ भी नहीं पा सकता हूं। से docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> ओरेकल 7 सर्वर >> सर्वर अवधारणाओं >> ओरेकल डेटाटाइप (सीधे इसे करने के लिए लिंक नहीं कर सकते) बाद में के रूप में काफी एक ही बात कहते हैं संस्करणों। संस्करण 7 प्रलेखन के एक अन्य खंड में यह कहा गया है कि संस्करण 6 में वर्कर और वर्चर 2 चार के पर्यायवाची थे।
लेह रिफ़ेल

25

वर्तमान में, दोनों पर्यायवाची हैं।

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


3

क्योंकि मूल SQL मानक में एक VARCHAR 255 वर्ण का था, और Oracle उन दिनों मानकों के अनुपालन पर कम से कम एक छुरा था।


यह कुछ वर्षों में ओरेकल varchar3 (अधिकतम) देखने की उम्मीद करता है।
18

Sql- सर्वर को 255 से 8000 (और अब भी अधिकतम) तक अनुमत लंबाई बढ़ाने में कोई समस्या नहीं थी। ओरेकल को एक अलग डेटाटाइप की आवश्यकता क्यों थी।
bernd_k

1
इसके लिए कोई आवश्यकता नहीं है varchar(max), बस एकCLOB
a_horse_with_no_name

3
CLOB के पास VARCHAR2
Gaius
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.