ज्यादातर-अंग्रेजी बल्कि कभी कभी-न एक एसक्यूएल सर्वर डेटाबेस में डेटा है कि संभवतः काफी बड़ा हो सकता है, मैं UTF-8 एन्कोडेड के रूप में सबसे स्ट्रिंग डेटा भंडारण की ओर झुकाव रहा हूँ भंडारण। 8 बिट ASCII में
कुछ अन्य RDBMS के कि कोई एन्कोडिंग, एसक्यूएल सर्वर भंडार यूनिकोड डेटा केवल UTF-16 (लिटल एन्डियन) में को चुनने के लिए अनुमति देने के विपरीत, और गैर-यूनिकोड डेटा जो कुछ के लिए कोड पृष्ठ निहित है क्षेत्र के कोलेक्शन द्वारा।
माइक्रोसॉफ्ट कारण है कि मैं पूरी तरह से समझ में नहीं आता के लिए यूसीएस -2 चुना
को उनके निर्णय चुनें यूसीएस -2 समझ में आता है पर्याप्त यह देखते हुए कि UTF-16 के 1996 के मध्य में शुरू की गई थी और 2000 में पूरी तरह से निर्दिष्ट।कई अन्य सिस्टम इसका उपयोग (या उपयोग) भी करते हैं (कृपया देखें: https://en.wikipedia.org/wiki/UTF-16#Usage)। पर उनका निर्णय जारी है और यह अधिक संदिग्ध हो सकता है, हालांकि यह शायद विंडोज और .NET के कारण यूटीएफ -16 है। बाइट्स का भौतिक लेआउट यूसीएस -2 और यूटीएफ -16 के बीच समान है, इसलिए यूटीएफ -16 का समर्थन करने के लिए यूसीएस -2 से सिस्टम को अपग्रेड करना पूरी तरह से कार्यात्मक होना चाहिए, किसी भी मौजूदा डेटा को बदलने की जरूरत नहीं है।
एसक्यूएल सर्वर 2012 के लिए प्रलेखन एक UTF-8 UDT बनाने का तरीका दिखाता है,
उम, नहीं। SQLCLR के माध्यम से एक कस्टम उपयोगकर्ता-परिभाषित प्रकार बनाना नहीं है, किसी भी तरह से, आपको किसी मूल प्रकार के प्रतिस्थापन के लिए जा रहा है। विशेष डेटा को संभालने के लिए कुछ बनाने के लिए यह बहुत आसान है। लेकिन तार, एक अलग एन्कोडिंग के भी, विशेष से बहुत दूर हैं। अपने स्ट्रिंग डेटा के लिए इस रूट पर जाने से आपके सिस्टम की उपयोगिता की कोई भी मात्रा नष्ट हो जाएगी, प्रदर्शन का उल्लेख न करें क्योंकि आप किसी भी अंतर्निहित स्ट्रिंग फ़ंक्शंस का उपयोग करने में सक्षम नहीं होंगे। यदि आप डिस्क स्पेस पर कुछ भी सहेजने में सक्षम थे, तो उन लाभों को मिटा दिया जाएगा जो आप समग्र प्रदर्शन में खो देंगे। एक यूडीटी भंडारण इसे VARBINARY
पर क्रमबद्ध करके किया जाता है। तो करने के लिए किसी भी स्ट्रिंग तुलना या सॉर्टिंग, "बाइनरी"/"ऑर्डिनल" तुलना के बाहर, आपको अन्य सभी मानों को एक-एक करके, यूटीएफ -8 में परिवर्तित करना होगा, फिर स्ट्रिंग की तुलना करें भाषाई मतभेदों का विवरण हो सकता है।
इसके अलावा, "प्रलेखन" वास्तव में केवल नमूना कोड/अवधारणा सामग्री का सबूत है। कोड 2003 (http://msftengprodsamples.codeplex.com/SourceControl/latest#Kilimanjaro_Trunk/Programmability/CLR/UTF8String/CS/UTF8String/Utf8String.cs) में SQL Server 2005 के लिए लिखा गया था। मैंने कार्यक्षमता का परीक्षण करने के लिए एक स्क्रिप्ट देखी, लेकिन प्रदर्शन से जुड़े कुछ भी नहीं।
लेकिन यूसीएस -2 के लिए निर्णय संभावित रूप से SQL सर्वर में फैलता है।
हां, बहुत कुछ। डिफ़ॉल्ट रूप से, अंतर्निहित कार्यों का प्रबंधन केवल यूसीएस -2 के लिए होता है। लेकिन एसक्यूएल सर्वर 2012 में शुरू करने से, आप उन्हें पूर्ण यूटीएफ -16 चरित्र सेट (अच्छी तरह से, यूनिकोड संस्करण 5 या 6 के रूप में, अपने ओएस और .NET Framework के संस्करण के आधार पर) को कॉल करने में से एक का उपयोग कर प्राप्त कर सकते हैं। का नाम _SC
(यानी पूरक वर्ण) में समाप्त हो रहा है।
विकिपीडिया ... लिखते हैं कि यूसीएस -2 UTF-16
सही के पक्ष में अप्रचलित है। यूटीएफ -16 और यूसीएस -2 दोनों 2-बाइट कोड पॉइंट्स का उपयोग करते हैं। लेकिन यूटीएफ -16 अतिरिक्त पात्रों को मैप करने के लिए उनमें से कुछ जोड़े (यानी सरोगेट जोड़े) का उपयोग करता है। इन जोड़े के लिए उपयोग किए गए कोड बिंदु इस उद्देश्य के लिए यूसीएस -2 में आरक्षित हैं और इसलिए किसी भी प्रयोग करने योग्य प्रतीकों को मैप करने के लिए उपयोग नहीं किया जाता है। यही कारण है कि आप SQL सर्वर में किसी भी यूनिकोड वर्ण को स्टोर कर सकते हैं और इसे सही तरीके से संग्रहीत और पुनर्प्राप्त किया जाएगा।
विकिपीडिया ... नोट UTF-8, एक चर-चौड़े वर्णों की किसी भी यूनिकोड डेटा बिंदु
सही एन्कोडिंग करने में सक्षम सेट किया गया है कि हालांकि भ्रामक। हां, यूटीएफ -8 चर-चौड़ाई है, लेकिन यूटीएफ -16 भी मामूली रूप से परिवर्तनीय है क्योंकि सभी पूरक वर्ण दो डबल-बाइट कोड बिंदुओं से बने होते हैं। इसलिए यूटीएफ -16 प्रति प्रतीक 2 या 4 बाइट्स का उपयोग करता है, हालांकि यूसीएस -2 हमेशा 2 बाइट होता है। लेकिन यह भ्रामक हिस्सा नहीं है। भ्रामक क्या है यह निहितार्थ है कि कोई अन्य यूनिकोड एन्कोडिंग अन्य सभी कोड बिंदुओं को एन्कोड करने में सक्षम नहीं है। जबकि यूसीएस -2 उन्हें पकड़ सकता है लेकिन उन्हें समझ नहीं सकता है, यूटीएफ -16 और यूटीएफ -32 दोनों यूटीएफ -8 की तरह सभी यूनिकोड कोड पॉइंट्स को मैप कर सकते हैं।
और यह [ed: UTF-8] यूनिकोड टेक्स्ट के आदान-प्रदान के लिए वास्तविक तथ्य एन्कोडिंग प्रदान करता है।
यह सच हो सकता है, लेकिन यह एक परिचालन परिप्रेक्ष्य से पूरी तरह से अप्रासंगिक है।
यह किसी भी यूनिकोड वर्ण की तरह लगता है UTF-8 में व्यक्त किया जा सकता
फिर, सच है, लेकिन पूरी तरह से अप्रासंगिक के बाद से UTF-16 और UTF-32 भी सभी यूनिकोड कोड अंक मैप करें।
के बाद से सबसे अधिक पाठ अंग्रेजी हो जाएगा, प्रतिनिधित्व के साथ यूसीएस-2
परिस्थितियों में यह बहुत अच्छी तरह से सच हो सकता है पर निर्भर करता है के रूप में लगभग दो बार के रूप में कॉम्पैक्ट हो जाएगा, और आप के बारे में चिंतित होने की सही हैं इस तरह के अपशिष्ट उपयोग। हालांकि, जैसा कि मैंने इस प्रश्न में उल्लेख किया है कि इस (UTF-8 Support, SQL Server 2012 and the UTF8String UDT) की ओर अग्रसर है, यदि आपके पास VARCHAR
में फिट हो सकती है तो कुछ स्थानों को बर्बाद करने के लिए कुछ विकल्प हैं, फिर भी कुछ को NVARCHAR
होने की आवश्यकता है। सबसे अच्छा विकल्प रो कंप्रेशन या पेज कंप्रेसर (एंटरप्राइज़ एडिटन केवल!) को सक्षम करना है। एसक्यूएल सर्वर 2008 आर 2 में शुरू होने से, वे गैर-MAX NVARCHAR
फ़ील्ड को "यूनिकोड के लिए मानक संपीड़न योजना" का उपयोग करने की अनुमति देते हैं जो कम से कम यूटीएफ -8 के रूप में अच्छा है, और कुछ मामलों में यह यूटीएफ -8 से भी बेहतर है। NVARCHAR(MAX)
फ़ील्ड इस फैंसी संपीड़न का उपयोग नहीं कर सकते हैं, लेकिन उनके IN ROW डेटा नियमित ROW और/या पृष्ठ संपीड़न से लाभ उठा सकते हैं। डेटा संपीड़न सक्षम के साथ कृपया इस संपीड़न के विवरण और डेटा आकार की तुलना में कच्चे यूसीएस -2/यूटीएफ -16, यूटीएफ -8, और यूसीएस -2/यूटीएफ -16 के विवरण के लिए निम्नलिखित देखें।
SQL Server 2008 R2 - UCS2 compression what is it - Impact on SAP systems
भी वहाँ के रूप में कुछ प्रतिबंध (यह केवल एंटरप्राइज़ संस्करण में उपलब्ध होने से परे) और कुछ परिस्थितियों जब संपीड़न चीजों को बदतर बनाने के हो सकता है अधिक जानकारी के लिए Data Compression के लिए MSDN पेज देखें।
मैं जानता हूँ कि डिस्क "सस्ते"
कि बयान की सच्चाई कैसे एक को परिभाषित करता है "डिस्क" पर निर्भर करता है। यदि आप कमोडिटी पार्ट्स के मामले में बात कर रहे हैं कि आप अपने डेस्कटॉप/लैपटॉप में उपयोग के लिए स्टोर में शेल्फ को खरीद सकते हैं, तो सुनिश्चित करें। लेकिन, अगर एंटरप्राइज़-स्तरीय स्टोरेज के मामले में बात की जा रही है जिसका उपयोग आपके प्रोडक्शन सिस्टम के लिए किया जाएगा, तो मज़ेदार है कि जो भी बजट को नियंत्रित करता है उसे समझाने के लिए कि उन्हें मिलियन-प्लस-डॉलर SAN को अस्वीकार नहीं करना चाहिए क्योंकि यह "सस्ता है" ";-)।
यूसीएस -2 स्ट्रीम को तैरने से मुझे क्या समस्याएं आ सकती हैं?
कोई भी जिसे मैं सोच सकता हूं। खैर, जब तक कि आप उस यूडीटी को लागू करने जैसे कुछ करने के लिए किसी भी भयानक सलाह का पालन नहीं करते हैं, या सभी स्ट्रिंग्स को VARBINARY
में परिवर्तित करते हैं, या सभी स्ट्रिंग फ़ील्ड के लिए NVARCHAR(MAX)
का उपयोग करते हैं ;-)। लेकिन उन सभी चीजों में से आप चिंता कर सकते हैं, यूसीएस -2/यूटीएफ -16 का उपयोग कर एसक्यूएल सर्वर उनमें से एक नहीं होना चाहिए।
लेकिन, अगर किसी कारण से यूटीएफ -8 के लिए मूल समर्थन का यह मुद्दा बहुत महत्वपूर्ण नहीं है, तो आपको यूटीएफ -8 के लिए अनुमति देने के लिए एक और आरडीबीएमएस खोजने की आवश्यकता हो सकती है।
विंडोज 2012 पर एसक्यूएल सर्वर 2012 रैम के 4TB तक का समर्थन करेगा। आम तौर पर कोड को बेहतर बनाने के लिए किसी को नियोजित करने से रैम खरीदने के लिए सस्ता है। यह सिर्फ एक सुझाव है। – Ben
मैंने एक नई प्रणाली के लिए आर्किटेक्चर पर निर्णय लेने के दौरान सवाल पूछा। ऐसे प्रश्न पूछने का यह आदर्श समय है। चाहे रैम या कोडिंग प्रयास सस्ता है, आपकी समस्या के पैमाने पर निर्भर करता है। यदि Google अपनी डिस्क और रैम को कटौती करने के लिए कुछ हफ्तों तक एक प्रोग्रामर को नियोजित कर सकता है, तो यह एक बुद्धिमान निवेश होगा। –
ठीक है अच्छा बिंदु :-) मैं इस तरह के बड़े सिस्टम पर काम नहीं कर रहा हूं। मेरे लिए ऐसे प्रश्न आसान हैं। :-) – Ben