वरचर और नवरचचर के बीच अंतर लिखिए


59

वर्तमान में हमारे SQL सर्वर 2012 डेटाबेस में, हम उपयोग कर रहे हैं varchar, और हम इसे बदलना चाहते हैं nvarchar। मैंने ऐसा करने के लिए एक स्क्रिप्ट तैयार की है।

मेरा सवाल है कि SQL सर्वर varcharकॉलम बनाम nvarcharकॉलम में कैसे लिखता है, इसमें कोई अंतर है ? हमारे पास कई बैकएंड प्रक्रियाएं हैं जिनके बारे में मैं चिंतित हूं।

संपादित करें:
निश्चित नहीं है कि यह मदद करता है, लेकिन स्तंभों में अनुक्रमित, एफ / के, या उन पर बाधाएं नहीं हैं।


जवाबों:


46

आपको यह सुनिश्चित करने की आवश्यकता है कि आप एन उपसर्ग के साथ यूनिकोड स्ट्रिंग शाब्दिक उपसर्ग करते हैं। यदि अंतर्निहित डेटा प्रकार है, तो उदाहरण के लिए ये अलग तरीके से काम करेंगे NVARCHAR:

CREATE TABLE dbo.t(c NVARCHAR(32));

INSERT dbo.t(c) SELECT 'រៀន';
INSERT dbo.t(c) SELECT 'នរៀ';
INSERT dbo.t(c) SELECT N'រៀន';

SELECT c FROM dbo.t;

SELECT c FROM dbo.t WHERE c = 'រៀន';
SELECT c FROM dbo.t WHERE c = N'រៀន';

परिणाम:

c
----
??? -- not stored correctly
??? -- not stored correctly
រៀន -- stored correctly!

c
----
???
??? -- probably not expected, however all Unicode characters have been changed to ?

c
----
រៀន

मोबाइल डिवाइस या डिक्रिपिट ब्राउज़र पर उन लोगों के लिए जो वास्तविक यूनिकोड वर्णों के बजाय बॉक्स वर्ण दिखाते हैं, यह वही है जो ऐसा दिखता है:

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


37

सबसे बड़ी चिंता यह है कि nvarcharप्रति वर्ण 2 बाइट्स का उपयोग करता है, जबकि varchar1 का उपयोग करता है। इस प्रकार, nvarchar(4000)भंडारण स्थान की समान मात्रा का उपयोग करता है varchar(8000)*।

आपके सभी कैरेक्टर डेटा के अलावा स्टोरेज स्पेस की दुगुनी जरूरत है, इसका मतलब यह भी है:

  • आपको nvarchar8060 बाइट पंक्ति सीमा / 8000 बाइट वर्ण स्तंभ सीमा के भीतर पंक्तियों को रखने के लिए छोटे स्तंभों का उपयोग करना पड़ सकता है ।
  • यदि आप nvarchar(max)स्तंभों का उपयोग कर रहे हैं, तो वे जितनी जल्दी हो सके, पंक्ति से बाहर धकेल दिए varchar(max)जाएंगे।
  • आपको nvarchar900-बाइट इंडेक्स की सीमा के भीतर रहने के लिए छोटे कॉलम का उपयोग करना पड़ सकता है (मुझे नहीं पता कि आप इतनी बड़ी इंडेक्स कुंजी का उपयोग क्यों करना चाहते हैं, लेकिन आप कभी नहीं जानते हैं)।

इसके अलावा, साथ काम करना nvarcharबहुत अलग नहीं है, यह मानते हुए कि आपका क्लाइंट सॉफ्टवेयर यूनिकोड को संभालने के लिए बनाया गया है। एसक्यूएल सर्वर पारदर्शी रूप से एक काटने जाएगा varcharकरने के लिए nvarcharहै, तो आप सख्ती से जब तक आप 2-बाइट (यानी यूनिकोड) शाब्दिक में पात्रों का उपयोग कर रहे स्ट्रिंग शाब्दिक के लिए एन उपसर्ग जरूरत नहीं है। ध्यान रखें कि कास्टिंग nvarcharकरने varbinaryसे अलग परिणाम मिलते हैं varchar। महत्वपूर्ण बिंदु यह है कि आपको एप्लिकेशन को काम करने के लिए तुरंत प्रत्येक varchar शाब्दिक को एक nvarchar शाब्दिक में बदलना नहीं होगा, जो प्रक्रिया को आसान बनाने में मदद करता है।

* यदि आप डेटा संपीड़न का उपयोग करते हैं (हल्के पंक्ति संपीड़न के लिए पर्याप्त है, एंटरप्राइज़ संस्करण की आवश्यकता से पहले एसक्यूएल सर्वर 2016 SP1 ) आप आमतौर पर मिल जाएगा ncharऔर nvarcharअधिक नहीं जगह लेने charऔर varcharकी वजह से, यूनिकोड संपीड़न (SCSU कलन विधि का उपयोग)


17

निम्नलिखित प्रमुख अंतर हैं:

  1. Nvarchar UNICODE डेटा संग्रहीत करता है। यदि आपके पास UNICODE या बहुभाषी डेटा संग्रहीत करने की आवश्यकता है, तो nvarchar पसंद है। Varchar ASCII डेटा स्टोर करता है और सामान्य उपयोग के लिए आपका डेटा प्रकार का विकल्प होना चाहिए।
  2. मेमोरी उपयोग के संबंध में, नवरचचर प्रति चरित्र में 2 बाइट्स का उपयोग करता है, जबकि वर्चर 1 का उपयोग करता है।
  3. NV -CHAR को VARCHAR में शामिल होने से काफी अच्छा प्रदर्शन होता है।
  4. डेटा सम्मिलित करते समय एन उपसर्ग की आवश्यकता हो सकती है: INSERT dbo.t (c) SELECT N'ʤ ʥ ʨ; ʦ ';
  5. कुछ विशेषज्ञ हमेशा nvarchar की सलाह देते हैं क्योंकि: चूंकि सभी आधुनिक ऑपरेटिंग सिस्टम और डेवलपमेंट प्लेटफॉर्म यूनिकोड का उपयोग आंतरिक रूप से करते हैं, varchar के बजाय nvarchar का उपयोग करते हुए, हर बार जब आप डेटाबेस से पढ़ते हैं या लिखते हैं तो एन्कोडिंग रूपांतरणों से बचेंगे।

0

RDP मर्ज प्रतिकृति के लिए एक मोबाइल DB से SQL Server 2005 के लिए nvarchar की आवश्यकता थी। इसके अलावा LTrim (), RTrim () और ट्रिम () का उपयोग किया गया एक बहुत bc nvarchar स्वचालित रूप से डेटा प्रविष्टि से रिक्त स्थान को ट्रिम () नहीं किया था, जबकि Varchar ने किया था ।

मुझे पता नहीं है कि हाल के वर्षों में बदल गया है या नहीं, लेकिन nvarchar अब उत्पन्न डेटाबेस में वीएस प्रो 2017 पर .NET सिंपल सदस्यता वेबसाइट लॉगिन के लिए उपयोग किया जाने वाला मानक है।


-3

यदि आप वार्चर पर NVarchar का उपयोग करते हैं और आपको MULTI-LINQUAL का समर्थन करने की कोई आवश्यकता नहीं है, तो आप DB, Backups (स्थानीय और ऑफसाइट) के लिए भंडारण बढ़ाते हैं। आधुनिक डेटाबेस को दोनों का समर्थन करना चाहिए और डिजाइन में किसी भी रूपांतरण हिट पर विचार किया जाना चाहिए।

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