क्योंकि MS SQL Server को UTF-8 के लिए अन्य RDBMS की तुलना में खराब समर्थन प्राप्त है।
एमएस SQL सर्वर, विंडोज के भीतर ही उपयोग किए जाने वाले कन्वेंशन का अनुसरण करता है, जो कि "संकीर्ण" स्ट्रिंग्स ( char
C ++, CHAR
या VARCHAR
SQL में) एक विरासत "कोड पेज" में एन्कोडेड हैं । कोड पृष्ठों के साथ समस्या यह है कि उनके पास सीमित संख्या में वर्ण हैं (अधिकांश एकल-बाइट एन्कोडिंग हैं, जो रिपोर्टोअर को 256 वर्णों तक सीमित करता है) और एक ही भाषा (या समान वर्णमाला वाली भाषाओं के समूह) के आसपास डिज़ाइन किए गए हैं। इससे बहुभाषी डेटा संग्रहीत करना कठिन हो जाता है। उदाहरण के लिए, आप रूसी और हिब्रू दोनों डेटा संग्रहीत नहीं कर सकते क्योंकि रूसी कोड पृष्ठ 1251 का उपयोग करता है और हिब्रू कोड पृष्ठ 1255 का उपयोग करता है ।
यूनिकोड एक लाख से अधिक पात्रों के लिए कमरे के साथ सेट किए गए एक विशालकाय कोडित चरित्र का उपयोग करके इस समस्या को हल करता है, जो दुनिया की हर भाषा का प्रतिनिधित्व करने के लिए पर्याप्त है। कई यूनिकोड एन्कोडिंग योजनाएं हैं; माइक्रोसॉफ्ट के उपयोग का चुनाव UTF-16 , के लिए ऐतिहासिक कारणों से । क्योंकि UTF-16 पारंपरिक 8-बिट के बजाय 16-बिट कोड इकाइयों के अनुक्रम के रूप में तार का प्रतिनिधित्व करता है, एक अलग चरित्र प्रकार की आवश्यकता है। MSVC ++ में, यह है wchar_t
। और MS SQL में, यह NCHAR
या है NVARCHAR
। N
"राष्ट्रीय" के लिए खड़ा है , जो मेरे लिए पीछे की ओर लगता है क्योंकि यूनिकोड के बारे में है अंतर -nationalization, लेकिन यह आईएसओ शब्दावली है।
अन्य SQL कार्यान्वयन आपको स्तंभ में UTF-8 पाठ संग्रहीत करने देते हैं VARCHAR
। UTF-8 एक चर-लंबाई (प्रति वर्ण 1-4 बाइट्स) एन्कोडिंग है जो उस स्थिति के लिए अनुकूलित होता है जब आपका डेटा ज्यादातर बेसिक लैटिन रेंज में होता है (जो कि ASCII के अनुसार प्रति वर्ण 1 बाइट के रूप में दर्शाया जाता है), लेकिन प्रतिनिधित्व कर सकते हैं कोई भी यूनिकोड वर्ण। इस प्रकार, आप bwalk2895 द्वारा उल्लिखित "दो बार जितना स्थान" समस्या से बचेंगे।
दुर्भाग्य से, MS SQL सर्वर UTF-8 का समर्थन नहीं करता हैVARCHAR
, इसलिए इसके बजाय आपको या तो UTF-16 का उपयोग करना होगा (और ASCII पाठ के लिए अपशिष्ट स्थान), एक गैर-यूनिकोड कोड पृष्ठ का उपयोग करें (और विदेशी वर्णों का प्रतिनिधित्व करने की क्षमता खो दें) या किसी BINARY
स्तंभ में UTF-8 को संग्रहीत करें (और SQL स्ट्रिंग फ़ंक्शंस जैसी असुविधाओं से निपटें जो ठीक से काम नहीं कर रही हैं, या आपके GUI DB प्रबंधक में हेक्स डंप के रूप में डेटा को देखने के लिए)।