Database
 sql >> डेटाबेस >  >> RDS >> Database

डेटाबेस स्तर के संयोजन को समझना और डेटाबेस के लिए इसे बदलने का प्रभाव

जब आप SQL डेटाबेस सिस्टम में कोई एप्लिकेशन विकसित करते हैं या कोड लिखते हैं, तो यह समझना महत्वपूर्ण है कि डेटा को कैसे सॉर्ट और तुलना की जाएगी। आप अपने डेटा को एक विशिष्ट भाषा में संग्रहीत कर सकते हैं, या आप चाहते हैं कि SQL सर्वर केस-संवेदी और केस असंवेदनशील डेटा को अलग-अलग व्यवहार करे। Microsoft ने एक SQL सर्वर सेटिंग प्रदान की है जिसे Collation . कहा जाता है ऐसी आवश्यकताओं को नियंत्रित और संबोधित करने के लिए।

SQL सर्वर में Collation क्या है?

हम नीचे दिए गए अनुसार SQL सर्वर में विभिन्न स्तरों पर कोलेशन सेट कर सकते हैं।

  • सर्वर स्तर
  • डेटाबेस स्तर
  • स्तंभ स्तर
  • अभिव्यक्ति स्तर

सर्वर स्तर के संयोजन को कभी-कभी SQL सर्वर इंस्टेंस स्तर का संयोजन . कहा जा सकता है ।

यदि आप डेटाबेस निर्माण के दौरान किसी विशिष्ट संयोजन का चयन नहीं करते हैं, तो डेटाबेस स्तर के संयोजन को सर्वर स्तर की कॉलेशन सेटिंग से इनहेरिट किया जाएगा। आप बाद में डेटाबेस-स्तर के संयोजन को भी बदल सकते हैं। ध्यान दें कि बदलते डेटाबेस संयोजन को केवल आगामी या नई वस्तुओं के लिए लागू किया जाएगा जो संयोजन परिवर्तन के बाद बनाए जाएंगे।

नया संयोजन उन तालिकाओं में संग्रहीत मौजूदा डेटा को संशोधित नहीं करेगा जो अंतिम संयोजन प्रकार के साथ सॉर्ट किए गए थे। नई संयोजन सेटिंग के कारण इस संग्रहीत डेटा रूपांतरण को संभालने के लिए एप्लिकेशन टीम को और योजना बनाने की आवश्यकता है।

इसे करने के कई तरीके हैं। एक मौजूदा तालिका से डेटा को नए संयोजन के साथ बनाई गई एक नई तालिका में कॉपी करना है और फिर पुरानी तालिका को नए के साथ बदलना है। आप एक नया कोलाज बनाकर अपने टेबल डेटा को एक नए डेटाबेस में ले जा सकते हैं, और पुराने डेटाबेस को एक नए से बदल सकते हैं।

ध्यान दें :मिलान को बदलना एक जटिल कार्य है और जब तक आपके पास कोई अनिवार्य व्यावसायिक मामला न हो, तब तक आपको इससे बचना चाहिए।

SQL सर्वर में डेटाबेस कोलेशन कैसे खोजें और बदलें?

आइए आगे बढ़ते हैं और SQL सर्वर इंस्टेंस और उस इंस्टेंस पर होस्ट किए गए सभी डेटाबेस के संयोजन की जांच करते हैं। आप डेटाबेस या इंस्टेंस स्तर गुणों . तक पहुंच कर मिलान की जांच कर सकते हैं SQL सर्वर प्रबंधन स्टूडियो का उपयोग करके या केवल नीचे दिए गए T-SQL कथन को निष्पादित करके विंडो। प्रत्येक डेटाबेस के लिए कोलेशन सिस्टम ऑब्जेक्ट sys.databases . में संग्रहीत किया जाता है - हम यह जानकारी प्राप्त करने के लिए इसे एक्सेस करेंगे।

--Check Database Collation
SELECT name, collation_name  
FROM sys.databases  
GO  
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]

मैंने उपरोक्त टी-एसक्यूएल स्टेटमेंट को निष्पादित किया है और नीचे आउटपुट मिला है। हम देख सकते हैं कि सभी डेटाबेस और सर्वर-स्तरीय संयोजन में SQL_Latin1_General_CP1_CI_AS जैसी ही सेटिंग्स हैं . इसका मतलब है कि डेटाबेस कॉलेशन को बनाते समय सर्वर-स्तरीय कॉलेशन द्वारा इनहेरिट किया गया है, और डिफ़ॉल्ट मान नहीं बदला गया है।

अब, मैं आपको दिखाता हूँ कि SQL सर्वर प्रबंधन स्टूडियो में GUI का उपयोग करके डेटाबेस संयोजन की जाँच कैसे करें।

सबसे पहले, SQL सर्वर प्रबंधन स्टूडियो का उपयोग करके अपने SQL सर्वर इंस्टेंस से कनेक्ट करें। डेटाबेस . के बाद इंस्टेंस नोड का विस्तार करें फ़ोल्डर। लक्ष्य डेटाबेस पर राइट-क्लिक करें और गुण choose चुनें :

आपको नीचे डेटाबेस गुण मिलेंगे खिड़की।

अब विकल्प क्लिक करें बाईं ओर के पैनल से टैब। आपको राइट-साइड पैनल में कई प्रॉपर्टी सेटिंग्स मिलेंगी। संयोजन इस पृष्ठ की पहली संपत्ति है - आप देख सकते हैं कि यह वही है जो उपरोक्त टी-एसक्यूएल स्क्रिप्ट में था।

इसी तरह, आप SQL सर्वर इंस्टेंस नोड पर क्लिक कर सकते हैं और इंस्टेंस-स्तर गुणों . पर राइट-क्लिक कर सकते हैं सर्वर-स्तरीय संयोजन देखने के लिए।

यदि आप इस संयोजन को एक नए संयोजन में बदलना चाहते हैं, तो आपको बस संयोजन पर क्लिक करना होगा ड्रॉपडाउन और वह विकल्प चुनें जिसकी आपको आवश्यकता है। सुनिश्चित करें कि आपने इसे करने से पहले अपने डेटाबेस का पूरा बैकअप ले लिया है।

मैंने केस-संवेदी SQL_Latin1_General_CP1_CS के साथ एक समान संयोजन चुना है _एएस इस डेटाबेस के लिए और ठीक . क्लिक किया इसे लागू करने के लिए। नोट:सुनिश्चित करें कि इस प्रक्रिया के दौरान कोई भी लक्ष्य डेटाबेस से जुड़ा नहीं है, अन्यथा, आपको मोड को एकल उपयोगकर्ता एक में बदलना होगा। और इस कॉन्फ़िगरेशन को बदलें।

आप टी-एसक्यूएल स्टेटमेंट का उपयोग करके इस डेटाबेस संयोजन को भी बदल सकते हैं। उसके लिए, COLLATE . का उपयोग करें ALTER DATABASE स्टेटमेंट का क्लॉज।

सबसे पहले, हमने डेटाबेस को एकल-उपयोगकर्ता . में बदल दिया है मोड, फिर मिलान को बदल दिया, और अंत में, डेटाबेस को बहु-उपयोगकर्ता . में स्थानांतरित कर दिया मोड।

--Change Database Collation using T-SQL  
USE master;  
GO  
Alter DATABASE [AdventureWorks2019] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [AdventureWorks2019]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [AdventureWorks2019] SET MULTI_USER

SQL सर्वर में सभी समर्थित कॉलेशनों की सूची बनाएं

यह खंड आपको दिखाएगा कि SQL सर्वर में सभी उपलब्ध कॉलेशन कैसे खोजें। सबसे पहले, मैं आपको दिखाता हूँ कि SQL सर्वर इंस्टेंस के लिए सभी समर्थित कॉलेशनों की सूची कैसे प्राप्त करें।

SQL सर्वर में एक सिस्टम फ़ंक्शन होता है जिसे fn_helpcollations() . कहा जाता है जिसका उपयोग आप सभी कॉलेशन लाने के लिए कर सकते हैं।

सूची प्रदर्शित करने के लिए नीचे दी गई कमांड चलाएँ।

--Display the list of all collations  
SELECT name, description FROM fn_helpcollations()

हम आउटपुट सेक्शन में सभी 5508 समर्थित कोलाज देख सकते हैं। यदि आप सुनिश्चित नहीं हैं कि कौन सा संयोजन चुनना है, तो आप डेटाबेस में सेट किए जा सकने वाले सभी संभावित संयोजनों को फ़िल्टर करने के लिए नीचे दी गई स्क्रिप्ट में WHERE क्लॉज का उपयोग कर सकते हैं।

मान लीजिए कि आपको अपना डेटा यूएस अंग्रेजी भाषा में संग्रहीत करने की आवश्यकता है और चाहते हैं कि SQL सर्वर इसे केस-संवेदी प्रारूप में संभाले। आप अपनी क्वेरी के लिए संभावित और समर्थित कॉलेशन की सूची लाने के लिए नीचे दिए गए कमांड का उपयोग कर सकते हैं:

--Display the list of all collations with WHERE clause 
SELECT Name, Description FROM fn_helpcollations()  
WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%’

आउटपुट आपकी क्वेरी को संतुष्ट करने वाले केवल 10 कॉलेशन दिखाता है। आप विभिन्न संयोजनों को फ़िल्टर करने के लिए उपरोक्त स्क्रिप्ट का उपयोग कर सकते हैं।

क्वेरी आउटपुट पर डेटाबेस कोलेशन बदलने का प्रभाव

इस खंड में, मैं आपको एक ही क्वेरी के दो आउटपुट के बीच का अंतर दिखाऊंगा जब उन्हें अलग-अलग कॉलेशन के साथ निष्पादित किया जाता है।

सबसे पहले, मैं MSSQL . नाम का एक डेटाबेस बनाऊंगा एक संयोजन के साथ (SQL_Latin1_General_CP1_CS _एएस ) फिर मैं आउटपुट प्राप्त करने के लिए एक ही क्वेरी को दो बार चलाऊंगा। बाद में, मैं संयोजन को SQL_Latin1_General_CP1_CI में बदल दूंगा _एएस और अपना आउटपुट प्राप्त करने के लिए फिर से वही प्रश्न चलाएं। आप दोनों आउटपुट की तुलना कर सकते हैं और डेटाबेस संयोजन को बदलने के प्रभाव को समझ सकते हैं। तो, चलिए डेटाबेस निर्माण के साथ शुरू करते हैं।

नई डेटाबेस निर्माण विंडो लॉन्च करें जैसा कि नीचे की छवि में दिखाया गया है। आप इस डेटाबेस को T-SQL का उपयोग करके भी बना सकते हैं। उसके बाद, आप डेटाबेस का नाम और उसकी डेटा फ़ाइलें देख सकते हैं। अब, कोलेशन प्रॉपर्टी विंडो पर स्विच करने के लिए बाईं ओर के पैनल पर दूसरे टैब पर क्लिक करें।

आप देख सकते हैं कि इस डेटाबेस का संयोजन नाम डिफ़ॉल्ट . है . इसका मतलब है कि यह डेटाबेस सर्वर-स्तरीय संयोजन प्रकार से संयोजन प्राप्त करेगा। संयोजन क्लिक करें अपना नया संयोजन चुनने के लिए ड्रॉपडाउन।

मैंने नीचे दिए गए संयोजन का चयन किया है SQL_Latin1_General_CP1_CS _एएस इस डेटाबेस के लिए - डिफ़ॉल्ट नहीं। ठीकक्लिक करें डेटाबेस निर्माण के साथ आगे बढ़ने के लिए।

अब, नए बनाए गए डेटाबेस के लिए डेटाबेस संयोजन की जाँच करें। हम देख सकते हैं कि यह SQL_Latin1_General_CP1_CS . है _एएस जैसा कि हमने पिछले चरण में चुना है।

SQL_Latin1_General_CP1_CS . में _एएस , सीएस केस-संवेदी . के लिए खड़ा है मोड, और CI केस-असंवेदनशील . के लिए खड़ा है तरीका। अब आप आउटपुट प्राप्त करने के लिए या तो नीचे टी-एसक्यूएल कोड या कोई कोड चला सकते हैं।

मैंने एक ही कमांड को दो बार निष्पादित किया है। पहली स्क्रिप्ट SYS . मान वाले कॉलम नामों को फ़िल्टर करती है राजधानी . में अक्षर, जबकि दूसरी स्क्रिप्ट उसी कॉलम को समान मान के साथ फ़िल्टर करेगी sys छोटा . में पत्र। आउटपुट अनुभाग दर्शाता है कि पहली स्क्रिप्ट ने कोई आउटपुट नहीं दिखाया है, जबकि दूसरी स्क्रिप्ट ने अपने केस-संवेदी व्यवहार के कारण आउटपुट प्रदर्शित किया है।

Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO

अब, हम इस डेटाबेस के संयोजन को केस-असंवेदनशील संयोजन SQL_Latin1_General_CP1_CI में बदल देंगे _एएस नीचे दिए गए टी-एसक्यूएल स्टेटमेंट को निष्पादित करके। आप SQL सर्वर प्रबंधन स्टूडियो में डेटाबेस गुण विंडो तक पहुंच कर इसे GUI के माध्यम से भी बदल सकते हैं।

--Change database collation to SQL_Latin1_General_CP1_CI_AS
USE master;  
GO  
Alter DATABASE [MSSQL] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [MSSQL]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [MSSQL] SET MULTI_USER

मैंने उपरोक्त स्क्रिप्ट को एक शॉट में निष्पादित किया है, और डेटाबेस संयोजन को केस-असंवेदनशील समर्थन वाले एक नए संयोजन में सफलतापूर्वक बदल दिया गया था।

आप नव-निर्मित डेटाबेस MSSQL के संयोजन की जाँच करने के लिए नीचे दी गई स्क्रिप्ट चलाकर इस परिवर्तन को सत्यापित कर सकते हैं। हम देख सकते हैं कि नीचे दी गई छवि में इस डेटाबेस के लिए नया संयोजन सेट किया गया है।

हम इस परिवर्तन के प्रभाव को देखने के लिए कोलेशन को बदलने से पहले फिर से वही T-SQL स्टेटमेंट चलाएंगे। जैसा कि हम अभी देख सकते हैं, दोनों T-SQL स्टेटमेंट आउटपुट में हैं।

निष्कर्ष

मुझे आशा है कि यह स्पष्ट है कि SQL सर्वर में संयोजन महत्वपूर्ण है। यदि आप SQL सर्वर में किसी भी स्तर पर कॉलेशन में परिवर्तन करते हैं, तो हमने परिभाषित किया है कि यह क्या प्रभाव छोड़ता है। हमेशा उचित योजना बनाएं और पहले अपने निचले जीवन चक्र के वातावरण में संशोधनों का परीक्षण करें।

मेरे अगले लेख के लिए बने रहें, जहां मैं आपको सर्वर-स्तरीय संयोजन को बदलने के लिए चरण-दर-चरण विधि दिखाऊंगा।

कृपया इस लेख को साझा करें और अपनी प्रतिक्रिया दें, यह हमें बेहतर बनाने में मदद करता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संरचित क्वेरी भाषा – SQL सीखने का महत्व

  2. आईबीएम डीबी2 को आईआरआई सॉफ्टवेयर से जोड़ना

  3. चाकू

  4. जावा लॉगिंग की मूल बातें जानें

  5. संबंधपरक बनाम गैर-संबंधपरक डेटाबेस - भाग 2