
नया स्ट्रिंग कॉलम परिभाषित करने वाला प्रत्येक इंजीनियर निर्णय लेता है: क्या मैं nvarchar
का उपयोग करूं या varchar का?
जब से मैंने nvarchar
की खोज की है, मैं हमेशा nvarchar
का उपयोग करता हूं। मेरा विचार है, ऐसे डेटाटाइप का उपयोग क्यों करें जो टेक्स्ट वैल्यू को सपोर्ट न करे, और आपको असंगत वैल्यू का पता तब तक नहीं चलेगा जब तक यह प्रोडक्शन में न हो।
मैं स्पेस के बारे में तर्क सुनता हूं, लेकिन स्पेस सस्ता है और इसकी चिंता करने योग्य नहीं है। मैं जानता हूं कि आप क्या सोच रहे हैं, जब हार्ड ड्राइव भर जाती है तो लागत मायने नहीं रखती, और मैं सहमत हूं।
Sql Server 2008 R2 से शुरू करके nchar
और nvarchar
(nvarchar(max)
को छोड़कर) फील्ड्स पर डेटा कम्प्रेशन लागू किया जाता है। डेटा के आधार पर कम्प्रेशन की प्रभावशीलता अलग-अलग होती है, लेकिन अंग्रेजी के साथ 50% कम्प्रेशन होता है, जो इसे varchar
की स्पेस आवश्यकताओं के बराबर रखता है (1)।
विचार करने योग्य एक और बात यह है कि अधिकांश प्रोग्रामिंग भाषाएं UTF-16 को स्ट्रिंग टाइप के रूप में सपोर्ट करती हैं। इसलिए हर बार जब varchar
को डेटाबेस से लोड किया जाता है, तो इसे UTF-16 (nvarchar
-जैसा) में कन्वर्ट किया जाता है।
यह StackOverflow उत्तर nvarchar
बनाम varchar
को सारांशित करता है:
एक nvarchar कॉलम कोई भी Unicode डेटा स्टोर कर सकता है। एक varchar कॉलम 8-बिट कोडपेज तक सीमित है। कुछ लोग सोचते हैं कि varchar का उपयोग किया जाना चाहिए क्योंकि यह कम स्पेस लेता है। मेरा मानना है कि यह सही उत्तर नहीं है। कोडपेज असंगतताएं एक समस्या हैं, और Unicode कोडपेज समस्याओं का इलाज है। आजकल सस्ती डिस्क और मेमोरी के साथ, कोड पेजेस के साथ समय बर्बाद करने का वास्तव में कोई कारण नहीं है।
सभी आधुनिक ऑपरेटिंग सिस्टम और डेवलपमेंट प्लेटफॉर्म आंतरिक रूप से Unicode का उपयोग करते हैं। varchar के बजाय nvarchar का उपयोग करके, आप डेटाबेस से पढ़ने या लिखने के हर बार एन्कोडिंग कन्वर्शन से बच सकते हैं। कन्वर्शन में समय लगता है, और त्रुटियों की संभावना होती है। और कन्वर्शन त्रुटियों से रिकवरी एक गैर-तुच्छ समस्या है।
यदि आप किसी ऐसी एप्लिकेशन के साथ इंटरफेस कर रहे हैं जो केवल ASCII का उपयोग करती है, तो भी मैं डेटाबेस में Unicode का उपयोग करने की सिफारिश करूंगा। OS और डेटाबेस कोलेशन एल्गोरिदम Unicode के साथ बेहतर काम करेंगे। Unicode अन्य सिस्टम के साथ इंटरफेस करते समय कन्वर्शन समस्याओं से बचाता है। और आप भविष्य के लिए तैयारी कर रहे होंगे। और आप हमेशा यह वैलिडेट कर सकते हैं कि आपका डेटा 7-बिट ASCII तक सीमित है जो भी लेगेसी सिस्टम आपको बनाए रखना पड़ रहा है, पूर्ण Unicode स्टोरेज के कुछ लाभों का आनंद लेते हुए भी। (2)
मेरा निष्कर्ष यह है कि डेटा केवल तभी varchar होता है जब यह आराम की स्थिति में होता है।
संदर्भ:
1. Unicode Compression implementation
2. What is the difference between varchar and nvarchar?
लेखक: चक कॉनवे सॉफ्टवेयर इंजीनियरिंग और जेनेरेटिव AI में विशेषज्ञता रखते हैं। उनसे सोशल मीडिया पर जुड़ें: X (@chuckconway) या उन्हें YouTube पर देखें।