nvarchar (अधिकतम) बनाम NText


183

SQL सर्वर में nvarchar(max)बनाम NTextडेटा प्रकारों का उपयोग करने के फायदे और नुकसान क्या हैं ? मुझे पिछड़े संगतता की आवश्यकता नहीं है, इसलिए यह ठीक है जो nvarchar(max)पुराने SQL सर्वर रिलीज़ में समर्थित नहीं है।

संपादित करें: जाहिर है सवाल भी लागू होता है TEXTऔर IMAGEबनाम varchar(max)और varbinary(max), उन्हें बाद में डेटा प्रकार के लिए उन खोज के लिए।

जवाबों:


197

लाभ है कि आप की तरह काम करता है का उपयोग कर सकते हैं LENऔर LEFTपर nvarchar(max)और आप उस के खिलाफ ऐसा नहीं कर सकते ntextऔर text। यह nvarchar(max)उस textजगह के साथ काम करना आसान है जहां आपको उपयोग करना था WRITETEXTऔर UPDATETEXT

इसके अलावा, text, ntext, आदि, पदावनत किया जा रहा है ( http://msdn.microsoft.com/en-us/library/ms187993.aspx )


12
SQL सर्वर 2016 जाहिरा तौर पर अभी भी उनका समर्थन करेगा।
संगम

1
@Confluence ऐतिहासिक रूप से, जहाँ तक SQL सर्वर में उनके अस्तित्व का संबंध है, वचर और nvarchar की तुलना में टेक्स्ट और nText पुराने डेटा प्रकार है?
आरबीटी

आप WRITETEXT और UPDATETEXT का उपयोग करने के लिए नहीं है। शायद 2010 में आपने हालांकि किया था! किसी भी अधिक जानकारी के लिए इच्छुक हैं।
साइमन_वेर

38

VARCHAR(MAX)TEXTफ़ील्ड को समायोजित करने के लिए पर्याप्त बड़ा है । TEXT, NTEXTऔर IMAGESQL सर्वर 2000 के डेटा प्रकारों को SQL सर्वर के भविष्य के संस्करण में पदावनत किया जाएगा, SQL सर्वर 2005 डेटा प्रकारों को पिछड़ी संगतता प्रदान करता है, लेकिन नए डेटा प्रकारों का उपयोग करने की अनुशंसा की जाती है VARCHAR(MAX), NVARCHAR(MAX)और VARBINARY(MAX)


32

ntextहमेशा अपने डेटा को एक अलग डेटाबेस पेज में nvarchar(max)संग्रहीत करेगा , जबकि डेटा को डेटाबेस रिकॉर्ड में ही संग्रहीत करने का प्रयास करेगा।

तो nvarchar(max)कुछ हद तक तेज है (यदि आपके पास पाठ है जो 8 केबी से छोटा है)। मैंने यह भी देखा कि डेटाबेस का आकार थोड़ा धीमा हो जाएगा, यह भी अच्छा है।

जाओ nvarchar(max)


13

nvarchar(max)वह है जो आप उपयोग करना चाहते हैं। सबसे बड़ा लाभ यह है कि आप इस डेटा प्रकार पर सभी T-SQL स्ट्रिंग फ़ंक्शन का उपयोग कर सकते हैं। यह संभव नहीं है ntext। मैं किसी भी वास्तविक नुकसान से अवगत नहीं हूं।


मुझे समझ में नहीं आता है कि वे साथ जाने के लिए कहते हैं, nvarchar(max)लेकिन यह मुझे 4000 वर्णों तक सीमित करता है। क्या होगा यदि मैं उससे अधिक रखने के लिए एक क्षेत्र चाहता हूं?
VoidKing

2
nvarchar (अधिकतम) आपको 4000 वर्णों तक सीमित नहीं करता है। आपके पास असीमित संख्या में वर्ण हैं। इसके अलावा, एसक्यूएल सर्वर द्वारा टेक्स्ट और नेक्स्ट को पदावनत किया गया है। इसका मतलब यह है कि भविष्य के संस्करण में, वे अब समर्थित नहीं होंगे।
रैंडी मिंडर

OIC, मैं SQL सर्वर CE का उपयोग कर रहा हूं, जो मेरे nvarchar(max)4000 वर्णों को सीमित करता है । तो SQL सर्वर कॉम्पैक्ट के लिए, मेरे पास ntextकुछ मामलों में उपयोग करने के अलावा कोई विकल्प नहीं है । जब वे इसे बंद करते हैं, तो मुझे लगता है कि मुझे कुछ साइटों को अपग्रेड नहीं करना पड़ेगा।
14

1
@RandyMinder nvarchar (अधिकतम) असीमित भंडारण नहीं है। SQL सर्वर दस्तावेज़ीकरण के अनुसार "अधिकतम इंगित करता है कि अधिकतम संग्रहण आकार 2 ^ 31-1 बाइट्स (2 GB) है। बाइट्स में संग्रहण आकार, डेटा की वास्तविक लंबाई + 2 बाइट्स में दर्ज दो गुना है।"
शिव


4

Text(साथ NTextऔर साथ Image) का सबसे बड़ा नुकसान यह है कि इसे SQL सर्वर के भविष्य के संस्करण में हटा दिया जाएगा, जैसा कि प्रलेखन द्वारा किया गया है । जब SQL सर्वर के उस संस्करण को रिलीज़ किया जाएगा, तो आपके स्कीमा को प्रभावी रूप से अपग्रेड करना कठिन हो जाएगा।


3

मेरे अनुभव को रूपांतरित करने के साथ जोड़ना चाहते थे। मेरे पास textप्राचीन Linq2SQL कोड में कई फ़ील्ड थे। यह textअनुक्रमणिका में मौजूद स्तंभों को ONLINE के पुनर्निर्माण के लिए अनुमति देना था

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

मुझे यह भी चिंता थी कि अगर यह कॉलम प्रकार का सत्यापन कर रहा है तो Linq2SQL त्रुटियों का कारण बन सकता है।

हालाँकि, रिपोर्ट करने में प्रसन्नता है कि ALTER कमांड ने तुरंत लौटा दिया - इसलिए वे निश्चित रूप से केवल टेबल मेटाडेटा बदल रहे हैं। तालिका में होने के लिए <8000 वर्ण डेटा वापस लाने के लिए कुछ ऑफ़लाइन कार्य हो सकते हैं, लेकिन ALTER कमांड तत्काल था।

रूपांतरण की आवश्यकता वाले सभी कॉलम खोजने के लिए मैंने निम्नलिखित भाग किया:

SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name

SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name

इससे मुझे प्रश्नों की एक अच्छी सूची मिली, जिसे मैंने अभी चुना और एक नई विंडो में कॉपी किया। जैसे मैंने कहा - यह चलाना तत्काल था।

यहां छवि विवरण दर्ज करें

Linq2SQL बहुत प्राचीन है - यह एक डिज़ाइनर का उपयोग करता है जिसे आप टेबल पर खींचते हैं। ईएफ कोड के लिए स्थिति पहले से अधिक जटिल हो सकती है लेकिन मैंने अभी तक इससे निबटा नहीं है।


1

मैं जोड़ना चाहता हूं कि आप आंशिक या पूर्ण अपडेट के लिए .WITE क्लॉज का उपयोग कर सकते हैं और उच्च प्रदर्शन varchar(max)/nvarchar(max)डेटा प्रकारों के लिए करता है।

यहां आपको .WRITEक्लॉज का उपयोग करने का पूरा उदाहरण मिल सकता है ।

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