2010-09-06 16 views
6

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

आपकी मदद सादर के लिए बहुत-बहुत धन्यवाद

जेवियर

+0

यह उल्लेख करना भूल गया कि हम जिस ऑपरेटिंग सिस्टम का उपयोग करते हैं वह स्पैनिश में खिड़कियां है, अगर कॉलेशन निर्णय ओएस भाषा पर निर्भर करता है – javier

उत्तर

5

एक मिलान दो प्रभाव होते हैं:

  1. गैर-यूनिकोड डेटा प्रकारों के लिए यह, डेटा के कोड पेज को निर्धारित करता है यानी यह निर्धारित करता है आप कौन से पात्र कॉलम/चर में स्टोर कर सकते हैं या
  2. सभी डेटा प्रकारों के लिए, यह डेटा को सॉर्ट और तुलना करने के तरीके को प्रभावित करता है, यानी ऑर्डर बीई और समानता

पहली समस्या के साथ समस्याओं से बचने के लिए, हमेशा nchar/nvarchar डेटा प्रकारों का उपयोग करके यूनिकोड डेटा को स्टोर और हेरफेर करें, क्योंकि तब आपको कोलेक्शन के बारे में चिंता करने की ज़रूरत नहीं है। इसके लिए अधिक डिस्क स्थान की आवश्यकता है, लेकिन यह कुछ वास्तव में अजीब मुद्दों से बचाता है, इसलिए ज्यादातर लोगों के लिए यह शायद एक अच्छा व्यापार है।

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

और आप हमेशा स्पष्ट रूप से मिलान निर्दिष्ट करने के लिए मुक़ाबला उपयोग कर सकते हैं आप विशिष्ट प्रश्न पर अधिक नियंत्रण की जरूरत है:

create table #t (name nvarchar(100)) 

insert into #t select N'Che' 
insert into #t select N'Carlos' 
insert into #t select N'Cruz' 

select name from #t order by name collate Modern_Spanish_CI_AS 
select name from #t order by name collate Traditional_Spanish_CI_AS 

drop table #t 

आप और आप नहीं जानते कि कैसे पाठ डेटा हल या तुलना में किया जाएगा यदि आपके उपयोगकर्ता डॉन या तो नहीं पता, तो मैं बस आपके डिफ़ॉल्ट संयोजन के साथ रहूंगा (और यूनिकोड का उपयोग करें!); सबसे बुरे मामले में, आप डेटा को सही संयोजन के साथ हमेशा एक नई तालिका में ले जा सकते हैं। और किताबों ऑनलाइन में collations पर बहुत सारे दस्तावेज हैं जो आपको देखना चाहिए।

संबंधित मुद्दे