डेटाबेस डिफ़ॉल्ट के लिए सभी कॉलम समतुल्य रखने की सिफारिश मेरे लिए दिशानिर्देश या सर्वोत्तम प्रथाओं की तरह अधिक लगती है।
आप यहां पूरी तरह से सही हैं।
कुछ लोगों द्वारा इसे इतनी गंभीर त्रुटि क्यों माना जाता है?
उसी कारण से जिसे आप अक्सर सुनते / पढ़ते होंगे कि "आपको कभी उपयोग नहीं करना चाहिए :"
- कर्सर
GOTO
बयान
- SQLCLR
WITH (NOLOCK)
- आदि, आदि
कुछ विशेषताएं / विकल्प / प्रौद्योगिकियां दूसरों की तुलना में अधिक जटिल हैं और आमतौर पर उपयोगकर्ता को अधिक ज्ञान की आवश्यकता होती है क्योंकि इसका उपयोग करते समय परेशानी में पड़ने की संभावना किसी भी समस्या के नहीं होने की संभावना से कहीं अधिक है। इसलिए, सामान्य लोगों के लिए ऐसी चीजों के खिलाफ सामान्यीकृत नियम रखना आसान है। वास्तव में, जब लिखाई काम पर "मानक कोडिंग", मैं हमेशा के लिए कोई नियम होगा कभी नहींCURSORs का उपयोग करें, फिर भी मैं उन्हें स्वयं उपयोग करता हूं क्योंकि मैं दोनों को जानता हूं कि "कब" उनका उपयोग करना है और "कैसे" उनका प्रभावी ढंग से उपयोग करना है। लेकिन जो लोग केवल कभी-कभार प्रश्न लिखते हैं, उनसे यह जानने की उम्मीद नहीं की जानी चाहिए। यह भी "रजिस्ट्री को संपादित न करें जब तक कि आप पूरी तरह से नहीं जानते कि आप क्या कर रहे हैं", या नियम जो हम अपने माता-पिता (बहुत छोटे) बच्चों के लिए माता-पिता के रूप में बनाते हैं, जहां हमें उन्हें केवल कुछ करने के लिए नहीं कहने की आवश्यकता है क्योंकि वे हैं किसी विशेष कार्य को करने के लिए या इसे करने के बारे में कैसे जाना ठीक है, इसकी जटिलताओं का पता लगाने में सक्षम नहीं है।
Collations के मामले में, यह एक बहुत ही जटिल और भ्रमित करने वाला विषय है, और आप दोनों हार्ड-एरर में भाग सकते हैं (ये एक मुद्दा है लेकिन किसी मुद्दे का कम है क्योंकि वे स्पष्ट हैं और इसलिए इसे ठीक करना काफी आसान है) और "विषम" में व्यवहार जहां यह समझाना कठिन है कि चीजें जिस तरह से काम कर रही हैं, वे (क्यों कुछ वस्तुओं को फ़िल्टर किया जाता है, या फ़िल्टर नहीं किया जाता है, अपेक्षाओं के बाहर, या क्यों छंटनी अपेक्षाओं से बाहर काम कर रही है)। और दुःख की बात यह है कि बड़ी मात्रा में गलत सूचनाएँ तैर रही हैं, जो बड़े पैमाने पर भ्रम पैदा करती हैं। मैं वास्तव में Collations और encodings, आदि के सामान्य ज्ञान को बढ़ाने के लिए एक परियोजना पर काम कर रहा हूं और गलत सूचना और मिथकों का मुकाबला करता हूं, लेकिन अभी तक इसे जारी करने के लिए तैयार नहीं है (जब मैं इसे इसके लिंक के साथ अपडेट करूंगा)।
Collation के लिए, आपको वह उपयोग करने की आवश्यकता है जो व्यावसायिक मामले के लिए सबसे अधिक समझ में आता है। किसी तालिका या डेटाबेस में Collations को नहीं मिलाने की धारणा एक डिफ़ॉल्ट दृष्टिकोण है, लेकिन यदि आप सिस्टम कैटलॉग दृश्यों के विभिन्न स्तंभों के लिए उपयोग किए गए Collations को देखते हैं, तो आप उपयोग किए जा रहे विभिन्न Collations को देखेंगे। इसलिए मैं इस प्रश्न में मुख्य उद्धरण से सहमत हूं कि यदि IF कोलेशन अलग होने जा रहे हैं, तो यह जानबूझकर होना चाहिए, लेकिन इसमें स्वाभाविक रूप से कुछ भी गलत नहीं है।
इस सवाल के संबंध में (जोर दिया गया):
ऑक्टोपस डिप्लॉय सर्वर को कॉन्फ़िगर करते समय, ऑक्टोपस सेवर-इंस्टेंस के आरंभ के दौरान सेटअप एक FATAL त्रुटि के साथ विफल हो जाता है। त्रुटि-संदेश से संबंधित लेख यह नहीं समझाता है कि यह एक आवश्यकता क्यों है
मैंने लिंक किए गए प्रलेखन पृष्ठ की जाँच की और यह वास्तव में समझाता है कि यह एक आवश्यकता क्यों है। मैंने नीचे उस दस्तावेज़ से प्रासंगिक जानकारी की प्रतिलिपि बनाई है:
आपको यह सुनिश्चित करना चाहिए कि आप ऑक्टोपस डेटाबेस में सभी वस्तुओं के टकराव को भी बदल दें, अन्यथा ऑक्टोपस संस्करण के उन्नयन के दौरान डेटाबेस को संशोधित करते समय त्रुटियां हो सकती हैं। बनाए गए नए ऑब्जेक्ट अपडेट किए गए कॉलेशन का उपयोग करेंगे, और जब (उदाहरण के लिए) प्रयास कर रहे हैं, तो मूल कॉलेशन का उपयोग करके इन और मौजूदा ऑब्जेक्ट्स के बीच एसक्यूएल जॉइन करते हैं, तो कोलाज मिस-मैच त्रुटियां हो सकती हैं।
वे कह रहे हैं कि ऑक्टोपस डेटाबेस में उनके कोड में स्ट्रिंग कॉलम के बीच जॉइन है और भविष्य के अपग्रेड में नए कोड को पेश करने की संभावना हो सकती है जिसमें नए स्ट्रिंग कॉलम पर अतिरिक्त जॉइन है । नए कॉलम, या तो के माध्यम से CREATE TABLE
या ALTER TABLE ... ADD
, डेटाबेस के डिफॉल्ट कोलेशन को असाइन किया जाएगा यदिCOLLATE
नए स्ट्रिंग कॉलम के लिए कीवर्ड निर्दिष्ट नहीं किया गया था। और स्ट्रिंग कॉलम के बीच जोइन के समान Collation नहीं है वह Collation बेमेल त्रुटि उत्पन्न करेगा। वे उपयोगकर्ता को अपने स्वयं के Collation (संभवतः विभिन्न स्थानों को समायोजित करने के लिए) का चयन करने की अनुमति देते प्रतीत होते हैं क्योंकि वे शीर्ष पर कहते हैं कि एकमात्र आवश्यकता यह है कि Collation केस-असंवेदनशील हो। और डेटाबेस के Collation के बाद से उनके कोड रहता है कि हमेशा एक ही होने की गारंटी नहीं है, वे COLLATE
सभी नए स्ट्रिंग कॉलम में एक ही Collation को मजबूर करने के लिए कीवर्ड का उपयोग नहीं कर सकते हैं (अच्छी तरह से, वे तकनीकी रूप से कर सकते हैं, लेकिन इसके लिए गतिशील की आवश्यकता होती है एसक्यूएल इतना आसान नहीं है जब अपडेट स्क्रिप्ट तैयार करते समय)। यदि वे COLLATE
कीवर्ड का उपयोग करने में सक्षम थे , तो वे कर सकते थेडेटाबेस के डिफ़ॉल्ट Collation स्ट्रिंग स्तंभों से भिन्न होने के साथ दूर हो। यह कठिन "Collation मिसमैच" त्रुटियों से बचना होगा, लेकिन फिर भी उन स्ट्रिंग कॉलमों और स्ट्रिंग स्ट्रिंग शाब्दिक या चर में से एक से तुलनात्मक संचालन की संभावना को खुला छोड़ देगा, जिसके परिणामस्वरूप "विषम" व्यवहार होता है क्योंकि यह कॉलम के Collation का उपयोग करेगा और डेटाबेस का नहीं मिलान। बेशक, यह बहुत अच्छी तरह से अपेक्षित व्यवहार हो सकता है। लेकिन चूँकि यह एक 3 पार्टी ऐप है, व्यवहार ऐसा होना चाहिए, जो उपयोगकर्ता के बीच 50/50 के बजाय एक मौका हो, जो उपयोगकर्ता चाहता था (या उसे कोई आपत्ति नहीं थी) और बी) उपयोगकर्ता एक बग मानता है (और तब एक जंगली हंस पीछा और / या ब्लॉग के बारे में विक्रेता का समर्थन समय बर्बाद करता है कि उनका सॉफ्टवेयर कैसे छोटी है)।