SQL सर्वर पाठ प्रकार बनाम varchar डेटा प्रकार [बंद]


287

मेरे पास चर लंबाई का डेटा है और SQL सर्वर (2005) डेटाबेस में स्टोर करना चाहता हूं। मैं TEXT SQL प्रकार का चयन करने या VARCHAR SQL प्रकार, पेशेवरों और प्रदर्शन / पदचिह्न / कार्य में विपक्ष का चयन करने के तरीके के बारे में कुछ सर्वोत्तम प्रथाओं को सीखना चाहता हूं।


17
यदि Google ने आपको यहां भेजा है: MSDN SQL डेटा प्रकार पृष्ठ मदद कर सकता है।
Jeroen

जवाबों:


212

यदि आप SQL Server 2005 या बाद में उपयोग कर रहे हैं, तो उपयोग करें varchar(MAX)textडेटाप्रकार पदावनत है और नए विकास कार्य के लिए इस्तेमाल नहीं किया जाना चाहिए। से डॉक्स :

जरूरी

ntext, textऔर imageMicrosoft SQL Server के भविष्य के संस्करण में डेटा प्रकार हटा दिए जाएंगे। नए विकास कार्यों में इन डेटा प्रकारों का उपयोग करने से बचें, और उन अनुप्रयोगों को संशोधित करने की योजना बनाएं जो वर्तमान में उनका उपयोग करते हैं। उपयोग nvarchar (अधिकतम) , varchar (max) , और varbinary (अधिकतम) के बजाय।


3
धन्यवाद Mladen, मुझे यह देखकर आश्चर्य हुआ कि TEXT को हटा दिया गया है। क्या आपके पास इसका उल्लेख करने वाला कोई आधिकारिक दस्तावेज है?
जॉर्ज 2

1
हालांकि यह "आधिकारिक" नहीं है, लेकिन यह मूल बातें कवर करता है। पाठ वास्तव में मूल्यह्रास है और यह भी सब कुछ का समर्थन नहीं करता है जो कि varchar (अधिकतम) करता है, जैसे खोज और सूचकांक की क्षमता। blog.sqlauthority.com/2007/05/26/…
achinda99

32
यह उतना ही अपमानजनक है
Mladen Prajdic

1
कूल achinda99 और Mladen Prajdic! आपने जो प्रदान किया है, वह वही है जिसकी मुझे तलाश है। :-) एक और सवाल, हम कैसे चुनें कि विभिन्न स्थितियों में VARCHAR या VARCHAR (MAX) का उपयोग करें या नहीं?
जॉर्ज 2

1
इसके बारे में आधिकारिक एमएस जानकारी अपदस्थ है
Fanda

283

TEXTस्ट्रिंग डेटा के बड़े टुकड़ों के लिए उपयोग किया जाता है। यदि फ़ील्ड की लंबाई एक निश्चित सीमा से अधिक है, तो पाठ पंक्ति से बाहर संग्रहीत किया जाता है।

VARCHARहमेशा पंक्ति में संग्रहीत किया जाता है और इसमें 8000 वर्णों की सीमा होती है । यदि आप एक बनाने की कोशिश करते हैं VARCHAR(x), जहाँ x> 8000 , आपको एक त्रुटि मिलती है:

सर्वर: Msg 131, स्तर 15, राज्य 3, पंक्ति 1

किसी भी प्रकार के डेटा प्रकार (8000) के लिए अनुमत आकार () 'varchar' को दिए गए अधिकतम से अधिक है

SQL सर्वर 2005VARCHAR(MAX) में इन लंबाई सीमाओं की चिंता नहीं है , जो पंक्तिबद्ध तरीके से संग्रहीत की जा सकती हैंTEXT

ध्यान दें कि MAXयहाँ एक प्रकार का स्थिरांक नहीं है, VARCHARऔर VARCHAR(MAX)बहुत भिन्न प्रकार के हैं, बाद वाले बहुत करीब हैं TEXT

SQL सर्वर के पूर्व संस्करणों में आप TEXTसीधे पहुंच नहीं सकते थे , आप केवल एक प्राप्त कर सकते हैं TEXTPTRऔर इसे READTEXTऔर WRITETEXTकार्यों में उपयोग कर सकते हैं ।

में SQL सर्वर 2005 आप कर सकते हैं सीधे पहुँच TEXTकॉलम (यदि आप अभी भी करने के लिए एक स्पष्ट कलाकारों की जरूरत है, हालांकि VARCHARउनके लिए एक मूल्य निर्दिष्ट)।

TEXT अच्छा है:

  • यदि आपको अपने डेटाबेस में बड़े ग्रंथों को संग्रहीत करने की आवश्यकता है
  • यदि आप कॉलम के मूल्य पर खोज नहीं करते हैं
  • यदि आप इस कॉलम को शायद ही कभी चुनते हैं और इस पर शामिल नहीं होते हैं।

VARCHAR अच्छा है:

  • यदि आप छोटे तार संग्रहीत करते हैं
  • यदि आप स्ट्रिंग मान पर खोज करते हैं
  • यदि आप हमेशा इसका चयन करते हैं या इसे जॉइन करते हैं।

तक का चयन यहां मैं किसी भी प्रश्न है कि स्तंभ का मान जारी करने का अर्थ यह।

द्वारा खोज यहाँ मैं किसी भी प्रश्न जिसका परिणाम के मूल्य पर निर्भर करता है जारी करने का अर्थ यह TEXTया VARCHARस्तंभ। यह किसी भी में इसका उपयोग करने में शामिल हैं JOINया WHEREशर्त।

के रूप TEXTमें पंक्ति से बाहर संग्रहीत किया जाता है, TEXTकॉलम को शामिल नहीं करने वाले प्रश्न आमतौर पर तेज होते हैं।

क्या TEXTअच्छा है के कुछ उदाहरण :

  • ब्लॉग टिप्पणियाँ
  • विकी पेज
  • कोड स्रोत

क्या VARCHARअच्छा है के कुछ उदाहरण :

  • उपयोगकर्ताओं के नाम
  • पृष्ठ शीर्षक
  • फ़ाइल नाम

अंगूठे के एक नियम के रूप में, यदि आपको कभी 200 अक्षरों से अधिक के पाठ मूल्य की आवश्यकता होती है और इस कॉलम में शामिल नहीं होते हैं, तो उपयोग करें TEXT

अन्यथा उपयोग करें VARCHAR

PS वही UNICODEसक्षम NTEXTऔर NVARCHARसाथ ही लागू होता है , जिसे आपको ऊपर के उदाहरणों के लिए उपयोग करना चाहिए।

PPS वही लागू होता है VARCHAR(MAX)और NVARCHAR(MAX)जो SQL Server 2005+ के बजाय उपयोग करता है TEXTऔर NTEXT। यदि आप उन्हें हमेशा पंक्ति से बाहर रखना चाहते हैं, तो आपको large value types out of rowउनके लिए सक्षम करने की आवश्यकता होगी sp_tableoption

ऊपर और उल्लेख किया है यहाँ , TEXTआगामी रिलीज़ में पदावनत किया जा रहा है:

text in rowविकल्प के भविष्य के संस्करण में हटा दिया जाएगा एसक्यूएल सर्वर । नए विकास कार्य में इस विकल्प का उपयोग करने से बचें, और वर्तमान में उपयोग होने वाले अनुप्रयोगों को संशोधित करने की योजना बनाएं text in row। हमारा सुझाव है कि आप का उपयोग करके बड़ा डेटा संगृहीत varchar(max), nvarchar(max)या varbinary(max)डेटा प्रकार। इन डेटा प्रकारों के इन-रो और आउट-ऑफ-लाइन व्यवहार को नियंत्रित करने के लिए, large value types out of rowविकल्प का उपयोग करें ।


2
1. "यदि आप कॉलम के मूल्य पर खोज नहीं करते हैं" - तो क्या आप मुझे दिखा सकते हैं कि "खोज" का क्या मतलब है? आपका मतलब है कि इस कॉलम को चुनें, इस कॉलम को ऑर्डर करें, इस कॉलम को LIKE करें या इस कॉलम में कुछ स्ट्रिंग हेरफेर फंक्शन का उपयोग करें?
जॉर्ज 2

2
2. "VARCHAR को हमेशा पंक्ति में संग्रहीत किया जाता है और इसमें 8000 वर्णों की सीमा होती है।" - क्षमा करें मैं आपसे सहमत नहीं हूँ। VARCHAR 8000 से अधिक लंबा हो सकता है और 8000 से अधिक लंबा होने पर, VARCHAR को स्तंभों के अलावा संग्रहीत किया जाएगा। कोई टिप्पणी?
जॉर्ज २

1
3. इस धागे में उल्लेखित म्लादेन प्राजेडिक, TEXT प्रकार को पदावनत किया गया है, लेकिन मुझे नहीं लगता कि इसमें कोई दस्तावेज शामिल हैं। क्या आपके पास इसके कोई दस्तावेज हैं?
जॉर्ज 2

2
शांत क्वासोई! तुम इतने ज्ञानी हो! :-) एक और सवाल - "यह निश्चित रूप से VARCHAR (MAX) की चिंता नहीं करता है, जो कि SQL SERVER 2005 के लिए TEXT का पर्याय है।" "यह" आप क्या मतलब है?
जॉर्ज 2

"यह निश्चित रूप से VARCHAR (MAX) की चिंता नहीं करता है, जो कि SQL SERVER 2005 के लिए TEXT का पर्याय है।" - क्या आपके पास कोई दस्तावेज है जो कहता है कि TEXT SQL सर्वर 2005 में VARCHAR के समान है? मैंने कुछ खोज की लेकिन आधिकारिक दस्तावेज नहीं मिल सके। :-)
जॉर्ज २

41

एसक्यूएल सर्वर 2005 नई डेटाटाइप्स शुरू किए गए थे: varchar(max)और nvarchar(max) वे पुराने पाठ प्रकार के फायदे हैं: वे डेटा के 2GB करने के लिए सेशन शामिल कर सकते हैं, लेकिन वे भी के फायदे के सबसे है varcharऔर nvarchar। इन लाभों में स्ट्रिंग हेरफेर कार्यों का उपयोग करने की क्षमता है जैसे कि विकल्प ()।

इसके अलावा, varchar (अधिकतम) तालिका के (डिस्क / मेमोरी) स्थान में संग्रहीत किया जाता है, जबकि आकार 8Kb से नीचे होता है। केवल जब आप क्षेत्र में अधिक डेटा रखते हैं, तो इसे तालिका के स्थान से संग्रहीत किया जाता है। तालिका के स्थान में संग्रहीत डेटा (आमतौर पर) जल्दी पुनर्प्राप्त किया जाता है।

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

जैसा कि उल्लेख किया गया था, आप पाठ डेटाटाइप पर SUBSTRING का उपयोग कर सकते हैं, लेकिन केवल तब तक जब पाठ फ़ील्ड में 8000 से कम वर्ण हों।


1
धन्यवाद Edoode, आपने काफी संपूर्ण उत्तर दिया कि VARCHAR कितना अच्छा है, लेकिन कोई टिप्पणी या विचार कि VARCHAR का उपयोग कब करना है और TEXT का उपयोग कब करना है? मेरा प्रश्न 2 मुद्दे में से 1 चुनने के बारे में है। :-)
जॉर्ज २

1
दरअसल, MS SQL Server 2005 में आप TEXT कॉलम पर SUBSTRING और अन्य फ़ंक्शन का भी उपयोग कर सकते हैं।
क्वासोई

1
धन्यवाद क्वासोई! ऐसा लगता है कि TEXT को हटा दिया गया है। एक और प्रश्न, हम कैसे चुनें कि विभिन्न स्थितियों में VARCHAR या VARCHAR (MAX) का उपयोग करें या नहीं?
जॉर्ज 2

1
केवल varchar (max) का उपयोग करें जब एक नियमित varchar काफी बड़ा न हो (
8Kb

7

एमएस 2008 में कुछ बड़े बदलाव हुए हैं -> डेटा किस प्रकार उपयोग करना है, इस पर निर्णय लेते समय निम्नलिखित लेख पर विचार करने लायक हो सकता है। http://msdn.microsoft.com/en-us/library/ms143432.aspx

प्रति बाइट्स

  1. varchar (अधिकतम), varbinary (अधिकतम), xml, पाठ, या छवि स्तंभ 2 ^ 31-1 2 ^ 31-1
  2. नवरच (अधिकतम) कॉलम 2 ^ 30-1 2 ^ 30-1

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