2010-07-01 9 views
37

हमें केवल के बजाय VARCHAR(length) निर्दिष्ट करने की आवश्यकता क्यों है? वैसे भी यह गतिशील है।वर्चर को लंबाई विनिर्देश की आवश्यकता क्यों है?

यूपीडी: मैं विशेष रूप से इस तथ्य से परेशान हूं कि यह अनिवार्य है (उदा। MySQL में)।

+2

http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 –

+0

का संभावित डुप्लिकेट धन्यवाद, यह वास्तव में एक डुप्लिकेट है। – Fixpoint

उत्तर

10

सबसे पहले, इसे सभी डेटाबेस में इसकी आवश्यकता नहीं है। SQL Server पर देखें, जहां यह वैकल्पिक है।

भले ही, यह फ़ील्ड की सामग्री के लिए अधिकतम आकार को परिभाषित करता है। अपने आप में कोई बुरी चीज नहीं है, और यह अर्थ बताती है (उदाहरण के लिए - फोन नंबर, जहां आप क्षेत्र में अंतरराष्ट्रीय नंबर नहीं चाहते हैं)।

+3

सच है, बस SQL ​​सर्वर में आकार को परिभाषित नहीं करते समय सावधान रहें क्योंकि यह परिदृश्य के आधार पर अलग-अलग चीज़ों के लिए डिफ़ॉल्ट होगा। http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev

+0

"जब एन डेटा परिभाषा या परिवर्तनीय घोषणा कथन में निर्दिष्ट नहीं है, तो डिफ़ॉल्ट लंबाई 1 है जब CAST और CONVERT फ़ंक्शंस का उपयोग करते समय n निर्दिष्ट नहीं किया गया है, तो डिफ़ॉल्ट लंबाई 30 है। " लिंक से –

1
Wikipedia से

:

Varchar क्षेत्रों किसी भी आकार अप सीमित करने के का हो सकता है। सीमा डेटाबेस के प्रकार से अलग है, एक Oracle 9i डाटाबेस 4000 बाइट्स की एक सीमा होती है, एक MySQL डाटाबेस (पूरी पंक्ति के लिए) 65,535 बाइट्स की एक सीमा होती है और माइक्रोसॉफ्ट SQL सर्वर 2005 8000 बाइट्स (जब तक varchar (अधिकतम) का उपयोग किया जाता है, जो में 2,147,483,648 बाइट्स की अधिकतम संग्रहण क्षमता है)।

24

वर्चर की "लंबाई" सामग्री की लंबाई नहीं है, यह सामग्री की अधिकतम लंबाई है।

एक वर्चर की अधिकतम लंबाई गतिशील नहीं है, यह तय है और इसलिए निर्दिष्ट होना चाहिए।

यदि आप इसके लिए अधिकतम आकार निर्धारित नहीं करना चाहते हैं तो VARCHAR (MAX) का उपयोग करें।

+3

डिफ़ॉल्ट रूप से VARCHAR क्यों VARCHAR (MAX) का अर्थ नहीं है? INT का डिफ़ॉल्ट आकार है, तो VARCHAR का डिफ़ॉल्ट आकार क्यों नहीं हो सका? एसक्यूएल मानक बनाया गया था जब इस डिजाइन निर्णय के पीछे क्या कारण हैं? – Fixpoint

+1

SQL सर्वर मानकों के निर्माण के दौरान VARCHAR (MAX) मौजूद नहीं था। यह वर्कर (8000) या पाठ था। –

+0

वचर (MAX) को हुड के तहत VARCHAR (8000) (सबसे बड़ा गैर-अधिकतम प्रकार) से अलग तरीके से संभाला जाता है। कृपया केवल VARCHAR (MAX) का उपयोग करें जब आपको वास्तव में इसकी आवश्यकता हो या आपका प्रदर्शन भुगतना पड़ेगा। https://dba.stackexchange.com/questions/173895/understanding-varcharmax-8000-column-and-why-i-can-store-more-than-8000-charac – bobroxsox

3

डेटाबेस जितना अधिक डेटा संग्रहीत कर रहा है उसके बारे में जानता है, अनुरोधों के साथ डेटा खोज/जोड़/अपडेट करते समय यह अधिक अनुकूलन कर सकता है।

+4

वर्चर अधिकतम के आधार पर यह क्या अनुकूलन कर सकता है लंबाई, उदाहरण के लिए? – Fixpoint

1

उत्तर है कि आप की आवश्यकता नहीं है, यह वैकल्पिक है।

यदि आप यह सुनिश्चित करना चाहते हैं कि तार एक निश्चित लंबाई से अधिक न हों।

5

आप इसे अपने डेटा पर बाधा के रूप में देख सकते हैं। यह सुनिश्चित करता है कि आप उस डेटा को संग्रहीत न करें जो आपकी बाधा का उल्लंघन करता है। यह अवधारणात्मक रूप से उदाहरण के समान है एक पूर्णांक कॉलम पर एक चेक बाधा जो सुनिश्चित करती है कि केवल सकारात्मक मान दर्ज किए गए हों।

2

वहाँ संभव प्रदर्शन impact है: MySQL, temporary tables और MEMORY tables दुकान एक निश्चित लंबाई स्तंभ के रूप में एक VARCHAR कॉलम में अधिकतम लंबाई के लिए बाहर गद्देदार।

यदि आप VARCHAR कॉलम को आपके इच्छिततम आकार की तुलना में बहुत बड़ा बनाते हैं, तो आप जितना अधिक मेमोरी ले लेंगे उतना अधिक उपभोग करेंगे। यह cache efficiency, sorting speed इत्यादि को प्रभावित करता है,

तो आप अपनी स्ट्रिंग के नीचे अधिकतम लंबाई देते हैं। जैसे कि यदि आप चरित्र 10 की अधिकतम लंबाई रखते हैं तो उसकी लंबाई 100 या उससे अधिक न दें।

संबंधित मुद्दे