2009-04-10 15 views
12

मुझे एएसपीनेट वेबसाइट प्रोजेक्ट मिला है जो वर्तमान में SQL Server 2000 को इसके बैकएंड के रूप में चलाता है।वर्कर (अधिकतम) एमएस एसक्यूएल सर्वर 2000, समस्याएं?

मैं SQL सर्वर 2005 एक्सप्रेस का उपयोग कर डीबी की स्थानीय प्रति पर कुछ डेटाबेस परिवर्तन कर रहा हूं। मैंने varchar(max) कॉलम का उपयोग करके एक टेबल बनाई है। उनका उपयोग एक्सएचटीएमएल के संग्रहित स्निपेट्स में किया जाता है जो मनमानी लंबाई के होते हैं।

जबकि पर stackoverflow मैं इस में आए चारों ओर ब्राउज़ कर: Are there any disadvantages to always using nvarchar(MAX)?

उपयोगकर्ता mattruma कहते हैं कि वे "मुश्किल तरीके से" पता चला एसक्यूएल सर्वर पर varchar(max) उपयोग के बारे में 2000

क्या मैं बजाय varchar(max) का उपयोग करना चाहिए दिया गया है कि लाइव डेटाबेस SQL ​​सर्वर 2000 पर चलता है?

किसी भी मदद के लिए अग्रिम धन्यवाद!

उत्तर

11

ऐसा लगता है कि varchar(MAX) सीमाएं एक महत्वपूर्ण बिंदु हैं यदि आपका लाइव डीबी SQL Server 2000 है, जो उनका समर्थन नहीं करता है। यदि आपके पास स्टोर करने के लिए 8K से अधिक वर्ण हैं तो आप केवल TEXT कॉलम के साथ ही अन्य विकल्प के साथ बहुत अधिक बाएं हैं। हालांकि, सावधान रहें कि TEXT कॉलम में भी बहुत सी सीमाएं हैं।

उदाहरण के लिए आप उन्हें आसानी से सॉर्ट या समूह नहीं कर सकते हैं, न ही आप उन्हें अन्य कॉलम के साथ समानता के लिए तुलना कर सकते हैं। यह है कि आप Select * from mytable where Mytext1 = mytext2 नहीं कह सकते हैं।

अन्य प्रासंगिक चिंताओं:

  • मैं जिस तरह से आप यूनिकोड समर्थन करने के लिए जाना की परवाह किए बिना एक NText या NVarchar स्तंभ का उपयोग सुझाव देना चाहेंगे।
  • यदि तालिका में कई अन्य कॉलम हैं और varchar(8000) कॉलम अक्सर पूर्ण होने की संभावना है, तो आपको 8K की पंक्ति सीमा के साथ समस्या हो सकती है। इसे भी ध्यान में रखें।
1

टेक्स्ट कॉलम का उपयोग करें।

+0

यदि आप टेक्स्ट फ़ील्ड का उपयोग करते हैं, तो यह उस फ़ील्ड पर संभावित खोजों में बाधा डालता है। – TheTXI

+0

@TheTXI - उस कॉलम पर खोज करने से संबंधित ओपी के प्रश्न में कुछ भी नहीं है। –

+0

मैं टेक्स्ट डेटाटाइप का उपयोग करने की अनुशंसा नहीं करता, क्योंकि [इसे माइक्रोसॉफ्ट एसक्यूएल सर्वर के भविष्य के संस्करण में हटा दिया जाएगा] (http://msdn.microsoft.com/en-us/library/ms187993.aspx)। –

15

VARCHAR(Max) SQL सर्वर 2005 में पेश किया गया था, और SQL Server 2000 पर काम नहीं करेगा। आपको VARCHAR(8000) का उपयोग करने की आवश्यकता है यह मानने के लिए कि यह काफी बड़ा होगा। नहीं तो आप का उपयोग करने की आवश्यकता होगी TEXT

संपादित

इसके अलावा, अगर आप VARCHAR(8000) करने के लिए स्विच को ध्यान में रखने की एक सीमा है कि एक ही पंक्ति अधिक तो 8060 बाइट्स नहीं हो सकता है। तो यदि आप varchar(8000) तालिका भरते हैं और अन्य बड़े कॉलम का समूह है तो आपको एक त्रुटि मिलेगी। यह वह जगह है जहां Text आता है।

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

+0

हमें VARCHAR (8000) पर स्विच करना पड़ा। – mattruma

0

यह आपकी आवश्यकताओं पर निर्भर करता है। आप VARCHAR (MAX) के बजाय एक टेक्स्ट कॉलम का उपयोग कर सकते हैं, लेकिन आपको यह सुनिश्चित करना होगा कि आपके कार्यान्वयन को उस फ़ील्ड पर खोजने की आवश्यकता नहीं है, क्योंकि आप टेक्स्ट और NTEXT फ़ील्ड पर तुलना की तरह नहीं कर सकते हैं।

यदि आप 8000 वर्णों तक स्वयं को सीमित कर सकते हैं, तो मैं जानकारी संग्रहीत करने के लिए एक VARCHAR (8000) कॉलम का उपयोग करूंगा।

+0

nvarchar (4000) आपका मतलब है? या वर्कर (8000)? – gbn

+0

अच्छी पकड़, मैंने प्रतिक्रिया अद्यतन की। –

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