जवाबों:
अभी तक, वे पर्यायवाची हैं।
VARCHARमानक प्रिस्क्रिप्शन के रूप में भविष्य में खाली स्ट्रिंग के Oracleबीच अंतर का समर्थन करने के लिए आरक्षित है ।NULLANSI
VARCHAR2एक NULLऔर खाली स्ट्रिंग के बीच अंतर नहीं करता है , और कभी नहीं होगा।
यदि आप खाली स्ट्रिंग पर भरोसा करते हैं और NULLएक ही चीज होने के नाते, आपको उपयोग करना चाहिए VARCHAR2।
VARCHAR2क्योंकि वर्तमान में कोई ऐसा प्रकार नहीं है जो व्यवहार VARCHARकरना चाहिए। वास्तव में, आपको VARCHARतब तक उपयोग नहीं करना चाहिए जब तक कि यह ठीक से लागू न हो।
where x is NULLविभिन्न परिणाम लौटाते हैं, इसका मतलब where x = ''यह नहीं है कि NULLऔर ''किसी भी तरह से अलग हैं। =ऑपरेटर के कारण अलग व्यवहार है ।
वर्तमान में VARCHAR VARCHAR2 के समान ही व्यवहार करता है। हालांकि, प्रकार का VARCHARउपयोग नहीं किया जाना चाहिए क्योंकि यह भविष्य के उपयोग के लिए आरक्षित है।
से लिया गया: CHAR, VARCHAR, VARCHAR2 के बीच अंतर
VARCHARउपयोग नहीं किया जाना चाहिए। मैंने इसे संपादित किया
नवीनतम स्थिर ओरेकल उत्पादन संस्करण 12.2 से लिया गया: डेटा प्रकार
प्रमुख अंतर यह है कि VARCHAR2एक आंतरिक डेटा प्रकार है और VARCHARएक बाहरी डेटा प्रकार है । इसलिए हमें एक आंतरिक और बाहरी डेटा प्रकार के बीच अंतर को समझने की आवश्यकता है ...
एक डेटाबेस के अंदर, मानों को तालिकाओं में स्तंभों में संग्रहीत किया जाता है। आंतरिक रूप से, ओरेकल विशेष स्वरूपों में डेटा का प्रतिनिधित्व करता है जिसे आंतरिक डेटा प्रकार के रूप में जाना जाता है ।
सामान्य तौर पर, OCI (Oracle Call Interface) एप्लिकेशन डेटा के आंतरिक डेटा प्रकार अभ्यावेदन के साथ काम नहीं करते हैं, लेकिन होस्ट भाषा डेटा प्रकारों के साथ जिस भाषा में उन्हें लिखा जाता है, वह पूर्वनिर्धारित होता है। जब डेटा को OCI क्लाइंट एप्लिकेशन और डेटाबेस टेबल के बीच स्थानांतरित किया जाता है, तो OCI लाइब्रेरी डेटा को आंतरिक डेटा प्रकार और बाहरी डेटा प्रकारों के बीच परिवर्तित करती है।
बाहरी प्रकार प्रोग्रामर के लिए स्वामित्व डेटा प्रारूपों के बजाय मेजबान भाषा प्रकारों के साथ काम करना संभव बनाते हैं। ओरेकल डेटाबेस और ओसीआई एप्लिकेशन के बीच डेटा स्थानांतरित करते समय ओसीआई डेटा प्रकार के रूपांतरणों की एक विस्तृत श्रृंखला का प्रदर्शन कर सकता है। ओरेकल आंतरिक डेटा प्रकारों की तुलना में अधिक ओसीआई बाहरी डेटा प्रकार हैं।
VARCHAR2डेटा प्रकार 4000 बाइट्स की अधिकतम लंबाई के साथ पात्रों में से एक चर लंबाई स्ट्रिंग है। यदि init.ora पैरामीटर max_string_size डिफ़ॉल्ट है, तो कैन की अधिकतम लंबाई VARCHAR24000 बाइट्स हो सकती है। यदि init.ora पैरामीटर max_string_size = विस्तारित है, तो कैन की अधिकतम लंबाई VARCHAR232767 बाइट्स हो सकती है
VARCHARलंबाई बदलती के डेटा प्रकार भंडार चरित्र तार। पहले 2 बाइट्स में वर्ण स्ट्रिंग की लंबाई होती है, और शेष बाइट्स में स्ट्रिंग होती है। एक बाँध या परिभाषित कॉल में स्ट्रिंग की निर्दिष्ट लंबाई में दो लंबाई बाइट्स शामिल होने चाहिए, इसलिए VARCHARप्राप्त या भेजी जाने वाली सबसे बड़ी स्ट्रिंग 65533 बाइट्स लंबी हो सकती है, 65535 नहीं।
एक 12.2 डेटाबेस में एक त्वरित परीक्षण पता चलता है कि एक के रूप में आंतरिक डेटा प्रकार , ओरेकल अभी भी एक व्यवहार करता है VARCHARएक के रूप में pseudotype के लिए VARCHAR2। यह ऐसा नहीं है SYNONYMजो ओरेकल में एक वास्तविक वस्तु प्रकार है।
SQL> select substr(banner,1,80) from v$version where rownum=1;
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> create table test (my_char varchar(20));
Table created.
SQL> desc test
Name Null? Type
MY_CHAR VARCHAR2(20)
VARCHARProC / C ++ Precompiler विकल्पों के लिए कुछ निहितार्थ भी हैं। जो प्रोग्रामर रुचि रखते हैं, उनके लिए लिंक इस प्रकार है: प्रो * C / C ++ प्रोग्रामर गाइड
कुछ प्रयोग (नीचे देखें) के बाद, मैं पुष्टि कर सकता हूं कि सितंबर 2017 तक, स्वीकृत उत्तर में वर्णित कार्यक्षमता के संबंध में कुछ भी नहीं बदला है : -
NULLदोनों के लिए रोंVARCHAR
औरVARCHAR2।इन दोनों खोजशब्दों के ऐतिहासिक कारण को एक अलग प्रश्न के उत्तर में अच्छी तरह से समझाया गया है ।
VARCHAR 2000 बाइट्स वर्णों को संग्रहीत कर सकता है, जबकि VARCHAR2 वर्णों के 4000 बाइट्स संग्रहीत कर सकता है।
यदि हम डेटाटाइप को VARCHAR घोषित करते हैं तो यह NULL मानों के लिए जगह ले लेगा। VARCHAR2 डेटाटाइप के मामले में, यह NULL मानों के लिए किसी स्थान पर कब्जा नहीं करेगा। जैसे,
name varchar(10)
नाम 'रविजी' होने पर भी 6 बाइट्स मेमोरी रखेगा
name varchar2(10)
इनपुट स्ट्रिंग की लंबाई के अनुसार स्थान आरक्षित करेगा। उदाहरण के लिए, 'रविजी' के लिए 4 बाइट्स की मेमोरी।
यहाँ, _ NULL का प्रतिनिधित्व करता है।
नोट: varchar शून्य मानों के लिए स्थान आरक्षित करेगा और varchar2 शून्य मानों के लिए कोई स्थान आरक्षित नहीं करेगा।
VARCHARकरने वाला है CHAR।
वर्तमान में, वे समान हैं। लेकिन पहले
VARCHARNULLANSI मानक के रूप में, भविष्य के बीच और खाली स्ट्रिंग के बीच अंतर का समर्थन करने के लिए ओरेकल द्वारा आरक्षित है ।
VARCHAR2एक NULLऔर खाली स्ट्रिंग के बीच अंतर नहीं करता है , और कभी नहीं होगा।
Emp_name varchar(10)- यदि आप 10 अंकों से कम मूल्य दर्ज करते हैं तो शेष स्थान को हटाया नहीं जा सकता। इसमें कुल 10 जगहों का इस्तेमाल किया गया।
Emp_name varchar2(10) - यदि आप 10 अंकों से कम मूल्य दर्ज करते हैं तो शेष स्थान स्वतः हटा दिया जाता है
create table deleteme_table(v varchar(10), v2 varchar2(10)); insert into deleteme_table (v, v2) values ('abc','abc'); select v, length(v), v2, length(v2) from deleteme_table;