हमें केवल के बजाय VARCHAR(length)
निर्दिष्ट करने की आवश्यकता क्यों है? वैसे भी यह गतिशील है।वर्चर को लंबाई विनिर्देश की आवश्यकता क्यों है?
यूपीडी: मैं विशेष रूप से इस तथ्य से परेशान हूं कि यह अनिवार्य है (उदा। MySQL में)।
हमें केवल के बजाय VARCHAR(length)
निर्दिष्ट करने की आवश्यकता क्यों है? वैसे भी यह गतिशील है।वर्चर को लंबाई विनिर्देश की आवश्यकता क्यों है?
यूपीडी: मैं विशेष रूप से इस तथ्य से परेशान हूं कि यह अनिवार्य है (उदा। MySQL में)।
सबसे पहले, इसे सभी डेटाबेस में इसकी आवश्यकता नहीं है। SQL Server पर देखें, जहां यह वैकल्पिक है।
भले ही, यह फ़ील्ड की सामग्री के लिए अधिकतम आकार को परिभाषित करता है। अपने आप में कोई बुरी चीज नहीं है, और यह अर्थ बताती है (उदाहरण के लिए - फोन नंबर, जहां आप क्षेत्र में अंतरराष्ट्रीय नंबर नहीं चाहते हैं)।
सच है, बस SQL सर्वर में आकार को परिभाषित नहीं करते समय सावधान रहें क्योंकि यह परिदृश्य के आधार पर अलग-अलग चीज़ों के लिए डिफ़ॉल्ट होगा। http://www.adathedev.co.uk/2010/04/sql-cast-to-varchar-without-size.html – AdaTheDev
"जब एन डेटा परिभाषा या परिवर्तनीय घोषणा कथन में निर्दिष्ट नहीं है, तो डिफ़ॉल्ट लंबाई 1 है जब CAST और CONVERT फ़ंक्शंस का उपयोग करते समय n निर्दिष्ट नहीं किया गया है, तो डिफ़ॉल्ट लंबाई 30 है। " लिंक से –
:
Varchar क्षेत्रों किसी भी आकार अप सीमित करने के का हो सकता है। सीमा डेटाबेस के प्रकार से अलग है, एक Oracle 9i डाटाबेस 4000 बाइट्स की एक सीमा होती है, एक MySQL डाटाबेस (पूरी पंक्ति के लिए) 65,535 बाइट्स की एक सीमा होती है और माइक्रोसॉफ्ट SQL सर्वर 2005 8000 बाइट्स (जब तक varchar (अधिकतम) का उपयोग किया जाता है, जो में 2,147,483,648 बाइट्स की अधिकतम संग्रहण क्षमता है)।
वर्चर की "लंबाई" सामग्री की लंबाई नहीं है, यह सामग्री की अधिकतम लंबाई है।
एक वर्चर की अधिकतम लंबाई गतिशील नहीं है, यह तय है और इसलिए निर्दिष्ट होना चाहिए।
यदि आप इसके लिए अधिकतम आकार निर्धारित नहीं करना चाहते हैं तो VARCHAR (MAX) का उपयोग करें।
डिफ़ॉल्ट रूप से VARCHAR क्यों VARCHAR (MAX) का अर्थ नहीं है? INT का डिफ़ॉल्ट आकार है, तो VARCHAR का डिफ़ॉल्ट आकार क्यों नहीं हो सका? एसक्यूएल मानक बनाया गया था जब इस डिजाइन निर्णय के पीछे क्या कारण हैं? – Fixpoint
SQL सर्वर मानकों के निर्माण के दौरान VARCHAR (MAX) मौजूद नहीं था। यह वर्कर (8000) या पाठ था। –
वचर (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
डेटाबेस जितना अधिक डेटा संग्रहीत कर रहा है उसके बारे में जानता है, अनुरोधों के साथ डेटा खोज/जोड़/अपडेट करते समय यह अधिक अनुकूलन कर सकता है।
वर्चर अधिकतम के आधार पर यह क्या अनुकूलन कर सकता है लंबाई, उदाहरण के लिए? – Fixpoint
उत्तर है कि आप की आवश्यकता नहीं है, यह वैकल्पिक है।
यदि आप यह सुनिश्चित करना चाहते हैं कि तार एक निश्चित लंबाई से अधिक न हों।
आप इसे अपने डेटा पर बाधा के रूप में देख सकते हैं। यह सुनिश्चित करता है कि आप उस डेटा को संग्रहीत न करें जो आपकी बाधा का उल्लंघन करता है। यह अवधारणात्मक रूप से उदाहरण के समान है एक पूर्णांक कॉलम पर एक चेक बाधा जो सुनिश्चित करती है कि केवल सकारात्मक मान दर्ज किए गए हों।
वहाँ संभव प्रदर्शन impact
है: MySQL, temporary tables
और MEMORY tables
दुकान एक निश्चित लंबाई स्तंभ के रूप में एक VARCHAR
कॉलम में अधिकतम लंबाई के लिए बाहर गद्देदार।
यदि आप VARCHAR
कॉलम को आपके इच्छिततम आकार की तुलना में बहुत बड़ा बनाते हैं, तो आप जितना अधिक मेमोरी ले लेंगे उतना अधिक उपभोग करेंगे। यह cache efficiency, sorting speed
इत्यादि को प्रभावित करता है,
तो आप अपनी स्ट्रिंग के नीचे अधिकतम लंबाई देते हैं। जैसे कि यदि आप चरित्र 10 की अधिकतम लंबाई रखते हैं तो उसकी लंबाई 100 या उससे अधिक न दें।
http://stackoverflow.com/questions/2241238/why-does-oracle-varchar2-have-a-mandatory-size-as-a-definition-parameter/2244926#2244926 –
का संभावित डुप्लिकेट धन्यवाद, यह वास्तव में एक डुप्लिकेट है। – Fixpoint