SQL सर्वर 2019 (वर्तमान में बीटा / "कम्युनिटी टेक प्रीव्यू") में शुरू होकर, UTF-8 की नई श्रृंखला के माध्यम से UTF-8 के लिए मूल समर्थन है। अब, UTF-8 का उपयोग करने की क्षमता होने कामतलबयह नहीं है कि आपको चाहिए। UTF-8 का उपयोग करने के लिए निश्चित कमियां हैं, जैसे:
- केवल पहले 128 कोड अंक 1 बाइट हैं (यानी मानक 7-बिट ASCII सेट)
- अगले लगभग 2000 कोड अंक 2 बाइट्स हैं, इसलिए UTF-16 / पर कोई स्थान बचत नहीं है
NVARCHAR
- BMP में शेष 63k कोड पॉइंट (यानी U + 0800 - U + FFFF रेंज) सभी 3 बाइट्स हैं, इसलिए 1 बाइट UTF-16 / में एक ही वर्ण से बड़ा है
NVARCHAR
।
- बस यह कहा गया है: पूरक चरित्र दोनों एन्कोडिंग में 4 बाइट्स हैं, इसलिए वहां कोई अंतर नहीं है
- जब आप UTF-8 का उपयोग करके स्थान बचा सकते हैं, तो एक बहुत अच्छा मौका है कि आप ऐसा करने के लिए प्रदर्शन पर एक हिट लेंगे।
यह वास्तव में नीचे आता है: UTF-8 एक संग्रहण प्रारूप डिज़ाइन है जो 8-बिट सिस्टम को सक्षम करने के लिए है (जो कि आमतौर पर ASCII और ASCII विस्तारित - कोड पृष्ठ के आसपास डिज़ाइन किया गया था) यूनिकोड का उपयोग किए बिना कुछ भी तोड़ने या मौजूदा संशोधन की आवश्यकता के बिना चीजों को चालू रखने के लिए फाइलें। UTF-8 फ़ाइल सिस्टम और नेटवर्किंग के लिए अद्भुत है, लेकिन SQL सर्वर के अंदर संग्रहीत डेटा न तो है। तथ्य यह है कि डेटा जो कि मानक ASCII सीमा के भीतर ज्यादातर (या पूरी तरह से) होता है, उसी डेटा की तुलना में कम जगह की आवश्यकता होती है जब UTF-16 / NVARCHAR
एक साइड-इफेक्ट के रूप में संग्रहीत किया जाता है। निश्चित रूप से, यह एक साइड-इफेक्ट है जो उपयोगी साबित हो सकता है, लेकिन उस निर्णय को किसी ऐसे व्यक्ति द्वारा किए जाने की आवश्यकता है जो इस निर्णय के डेटा और परिणामों / कमियों दोनों को समझता है । ये हैसामान्य उपयोग के लिए एक सुविधा नहीं है।
इसके अलावा, UTF-8 के लिए मुख्य उपयोग-मामला (SQL सर्वर में) पहले से ही UTF-8 का उपयोग करने वाले ऐप कोड के लिए है, संभवतः पहले से ही एक और RDBMS के साथ है जो इसका समर्थन करता है, और ऐप कोड / DB स्कीमा को अपडेट करने की कोई इच्छा या क्षमता नहीं है। NVARCHAR
डेटाटाइप्स का उपयोग करने के लिए (तालिकाओं, चर, मापदंडों, आदि के लिए), या एक अपरकेस "एन" के साथ स्ट्रिंग शाब्दिक को उपसर्ग करना। लक्ष्य यूटीएफ -8 मौजूदा के कारण के समान है: समग्र संरचना को बदलने या रेंडर करने के बिना ऐप कोड को सक्षम करने के लिए सक्षम करें। यदि यह आपकी स्थिति का वर्णन करता है, तो UTF-8 का उपयोग करें, लेकिन ध्यान रखें कि इसके साथ अभी भी कुछ बग / मुद्दे हैं।
यदि आपको यूनिकोड की आवश्यकता नहीं है, तो बिना उपयोग किए NVARCHAR
या अपरकेस स्ट्रिंग "एन" उपसर्ग किए गए स्ट्रिंग शाब्दिकों के लिए काम करने की आवश्यकता नहीं है , तो केवल अन्य परिदृश्य जहां यूटीएफ -8 एक लाभ है, अगर आपके पास ज्यादातर मानक एएससीआईआई है जो इसके लिए अनुमति देने की आवश्यकता है यूनिकोड वर्ण, और आप उपयोग कर रहे हैं NVARCHAR(MAX)
(जिसका अर्थ है कि डेटा संपीड़न काम नहीं करेगा), और तालिका बार-बार अपडेट हो जाती है (इसलिए Clustered Columnstore Index शायद वास्तव में मदद करने वाला नहीं है)।
पूरी जानकारी के लिए कृपया मेरी पोस्ट देखें:
SQL Server 2019 में मूल निवासी UTF-8 समर्थन: उद्धारकर्ता या गलत पैगंबर?