SQL सर्वर 2005/2008 UTF-8 Collation / Charset


16

मैं SQL Server 2005/2008 में UTF-8पुनः सेट करने के लिए सीधे विकल्प नहीं खोज सकता Collations/Charsets, जैसा कि किसी अन्य SQL इंजन में सेट करना संभव है, लेकिन SQL Server 2005/2008 में केवल लैटिन और SQL कोलाज हैं।

SQL Server इंजन में इन टकराव / चार्ज को बलपूर्वक स्थापित करने / स्थापित करने के लिए कुछ विकल्प है (2005 में दोनों)।

जवाबों:


13

नहीं, वहाँ नहीं है। SQL सर्वर UTF-8 का समर्थन नहीं करता है।

यदि आप यूनिकोड डेटा चाहते हैं, तो आपको अपने कॉलम को nvarchar / nchar के रूप में परिभाषित करने की आवश्यकता है। ध्यान दें, आंतरिक रूप से SQL सर्वर इसे UCS-2 के रूप में संग्रहीत करता है।

ध्यान दें कि यह एमएस ऑन कनेक्ट से अनुरोध किया गया है और एक पुराना KB आलेख है । और इस ब्लॉग पर कुछ जानकारी भी


6
इसके अलावा, यदि आप विदेशी अक्षरों के साथ एक नवरच पर कोई भी मेल करने जा रहे हैं, तो आपको स्ट्रिंग से पहले N के साथ प्रारूपित स्ट्रिंग (जैसे N'οἰκονόμον ') पर मिलान करने की आवश्यकता है।
स्वैसेक करें

क्या यह व्यवहार SQL सर्वर के किसी हालिया रिलीज़ में बदल गया है?
सेरिया

@ सियारिया: नहीं, समान व्यवहार
gbn

जो कोई भी इस उत्तर के लिए अपना रास्ता ढूंढता है, कृपया एमएस कनेक्ट पेज पर जाएं और SQL सर्वर पर MSF UTF-8 का समर्थन करें। साभार: D
साभार DarcyThomas

@DarcyThomas यह SQL Server 2019 में एक वास्तविकता बन रहा है, हालांकि यह अभी भी कुछ ऐसा नहीं है जब तक कि उन्हें इसके लिए स्पष्ट आवश्यकता न हो। कृपया मेरे देखें विवरण के लिए उत्तर देखें।
सोलोमन रटज़की

2

आप UTF-8 को एक वर्ण सेट के रूप में स्थापित नहीं कर सकते क्योंकि यह एक वर्ण सेट नहीं है, यह एक एन्कोडिंग है।

यदि आप यूनिकोड पाठ को संग्रहीत करना चाहते हैं तो आप nvarcharडेटा प्रकार का उपयोग करते हैं ।

यदि आप UTF-8 का उपयोग करके एन्कोडेड पाठ को संग्रहीत करना चाहते हैं, तो आप इसे बाइनरी डेटा ( varbinary) के रूप में संग्रहीत करते हैं ।


1

SQL सर्वर 2019 (वर्तमान में बीटा / "कम्युनिटी टेक प्रीव्यू") में शुरू होकर, UTF-8 की नई श्रृंखला के माध्यम से UTF-8 के लिए मूल समर्थन है। अब, UTF-8 का उपयोग करने की क्षमता होने कामतलबयह नहीं है कि आपको चाहिए। UTF-8 का उपयोग करने के लिए निश्चित कमियां हैं, जैसे:

  1. केवल पहले 128 कोड अंक 1 बाइट हैं (यानी मानक 7-बिट ASCII सेट)
  2. अगले लगभग 2000 कोड अंक 2 बाइट्स हैं, इसलिए UTF-16 / पर कोई स्थान बचत नहीं है NVARCHAR
  3. BMP में शेष 63k कोड पॉइंट (यानी U + 0800 - U + FFFF रेंज) सभी 3 बाइट्स हैं, इसलिए 1 बाइट UTF-16 / में एक ही वर्ण से बड़ा है NVARCHAR
  4. बस यह कहा गया है: पूरक चरित्र दोनों एन्कोडिंग में 4 बाइट्स हैं, इसलिए वहां कोई अंतर नहीं है
  5. जब आप 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 समर्थन: उद्धारकर्ता या गलत पैगंबर?


0

मेरा मामला है, मुझे अरबी चरित्रों को प्रदर्शित करना था और मेरा विकास डेटाबेस 2014 में था, यहां चीजों ने अच्छा काम किया। यहां, क्वेरी में मैं अरबी वर्ण देख सकता था और मेरा टकराव SQL_Latin1_General_CP1256_CI_AS था

लेकिन मेरा उत्पादन SQL सर्वर 2008 में था और अंततः उसने UTF-8 चार्ट का समर्थन नहीं किया। यहाँ, मैं सब देख सकता था ??????????? SQL 2008 में UTF-8 समर्थित नहीं है।

मैंने जो कुछ भी किया है, वह सभी प्रकार के नवरच में बदल गया है और मैं अरबी चार को ठीक से देख सकता हूं। इसके अलावा मैं अपने 2008 डेटाबेस कोलाज को SQL_Latin1_General_CP1256_CI_AS में बदलता हूं

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