हाँ, यदि आपका Oracle डेटाबेस यूनिकोड वर्ण सेट का उपयोग करके बनाया गया है, तो एक NVARCHAR
SQL सर्वर में एक VARCHAR2
में माइग्रेट किया जाना चाहिए ओरेकल में। Oracle में, NVARCHAR
जब डेटाबेस कैरेक्टर सेट यूनिकोड का समर्थन नहीं करता है, तो डेटा प्रकार मौजूद होता है ताकि एप्लिकेशन को यूनिकोड कैरेक्टर सेट का उपयोग करके डेटा स्टोर करने की अनुमति मिल सके।
हालांकि, माइग्रेट करते समय एक बात का ध्यान रखना चाहिए, वह है कैरेक्टर लेंथ सेमेन्टिक्स। SQL सर्वर में, एक NVARCHAR(20)
20 वर्णों के लिए स्थान आवंटित करता है जिसके लिए UCS-2 में 40 बाइट्स तक की आवश्यकता होती है। Oracle में, डिफ़ॉल्ट रूप से, एक VARCHAR2(20)
भंडारण के 20 बाइट्स आवंटित करता है। AL32UTF8
. में वर्ण सेट, यह संभावित रूप से केवल 6 वर्णों के लिए पर्याप्त स्थान है, हालांकि सबसे अधिक संभावना है कि यह बहुत अधिक संभाल लेगा (AL32UTF8
में एक एकल वर्ण) 1 और 3 बाइट्स के बीच की आवश्यकता है। आप शायद अपने Oracle प्रकारों को VARCHAR2(20 CHAR)
. के रूप में घोषित करना चाहते हैं जो इंगित करता है कि आप 20 वर्णों के लिए स्थान आवंटित करना चाहते हैं, भले ही कितने बाइट्स की आवश्यकता हो। यह समझाने की कोशिश करने की तुलना में संवाद करना बहुत आसान हो जाता है कि क्यों कुछ 20 वर्ण स्ट्रिंग की अनुमति है जबकि अन्य 10 वर्ण स्ट्रिंग अस्वीकार कर दी गई हैं।
आप सत्र स्तर पर डिफ़ॉल्ट लंबाई शब्दार्थ को बदल सकते हैं ताकि कोई भी तालिका जो आप बिना किसी लंबाई के शब्दार्थ को निर्दिष्ट किए बनाते हैं, वह बाइट शब्दार्थ के बजाय वर्ण का उपयोग करेगी
ALTER SESSION SET nls_length_semantics=CHAR;
इससे आप CHAR
typing लिखने से बच सकते हैं हर बार जब आप एक नया कॉलम परिभाषित करते हैं। इसे सिस्टम स्तर पर सेट करना भी संभव है, लेकिन ऐसा करने से NLS टीम द्वारा हतोत्साहित किया जाता है-- जाहिर है, Oracle द्वारा प्रदान की जाने वाली सभी स्क्रिप्ट का डेटाबेस के विरुद्ध पूरी तरह से परीक्षण नहीं किया गया है, जहां NLS_LENGTH_SEMANTICS
बदल दिया गया है। और शायद बहुत कम तृतीय-पक्ष स्क्रिप्ट हैं।