जवाबों:
अभी तक, वे पर्यायवाची हैं।
VARCHAR
मानक प्रिस्क्रिप्शन के रूप में भविष्य में खाली स्ट्रिंग के Oracle
बीच अंतर का समर्थन करने के लिए आरक्षित है ।NULL
ANSI
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 डिफ़ॉल्ट है, तो कैन की अधिकतम लंबाई VARCHAR2
4000 बाइट्स हो सकती है। यदि init.ora पैरामीटर max_string_size = विस्तारित है, तो कैन की अधिकतम लंबाई VARCHAR2
32767 बाइट्स हो सकती है
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)
VARCHAR
ProC / 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
।
वर्तमान में, वे समान हैं। लेकिन पहले
VARCHAR
NULL
ANSI मानक के रूप में, भविष्य के बीच और खाली स्ट्रिंग के बीच अंतर का समर्थन करने के लिए ओरेकल द्वारा आरक्षित है ।
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;