2012-12-10 28 views
7

एसक्यूएल का चयन करें आदेशFirebird डिफ़ॉल्ट वर्ण

SELECT a.RDB$CHARACTER_SET_NAME FROM RDB$DATABASE a 

रिटर्न शून्य निर्धारित किया है। नया डेटाबेस बनाते समय निर्दिष्ट नहीं होने पर क्या वर्ण सेट का उपयोग किया जाता है? फायरबर्ड (1.0, 2.0, 2.5.1 इत्यादि) के विभिन्न संस्करणों के बीच क्या अंतर है?

उत्तर

13

निर्माण के दौरान कोई वर्ण सेट निर्दिष्ट नहीं किया गया था, तो डेटाबेस के लिए डिफ़ॉल्ट वर्ण सेट वर्ण सेट NONE है, इंटरबेस 6.0 डेटा परिभाषा मार्गदर्शिका के पृष्ठ 47 देखें (documentation section फ़ायरबर्ड वेबसाइट के) में उपलब्ध है। फ़ायरबर्ड (शायद इंटरबेस के निर्माण के बाद से) से यह वही तरीका रहा है और अभी भी मौजूदा संस्करणों पर लागू होता है। हालांकि, फ़ायरबर्ड 2.5 के तहत जब एक डिफ़ॉल्ट वर्ण सेट के बिना डेटाबेस बनाया जाता है, तो RDB$CHARACTER_SET_NAME का मान NONE होगा। मुझे यकीन नहीं है कि यह पिछले संस्करणों में अलग था, तो मेरा अनुमान अभी भी NONE डिफ़ॉल्ट रूप से उपयोग करेगा, भले ही यह NULL की रिपोर्ट करता हो।

आप सुनिश्चित हो करना चाहते हैं, तो आप बस एक वर्ण सेट विनिर्देश के बिना एक CHAR या VARCHAR स्तंभ के साथ एक बुनियादी तालिका बना सकते हैं, और फिर डिफ़ॉल्ट निर्धारित करने के लिए निम्न क्वेरी का उपयोग करें:

SELECT a.RDB$FIELD_NAME, a.RDB$RELATION_NAME, 
     b.RDB$CHARACTER_SET_ID, c.RDB$CHARACTER_SET_NAME 
FROM RDB$RELATION_FIELDS a 
INNER JOIN RDB$FIELDS b 
    ON b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE 
INNER JOIN RDB$CHARACTER_SETS c 
    ON c.RDB$CHARACTER_SET_ID = b.RDB$CHARACTER_SET_ID 
WHERE RDB$RELATION_NAME = 'TABLE_NAME' 

आप कर सकते हैं किसी भी ((VAR)CHAR) फ़ील्ड बीटीडब्ल्यू के चरित्र सेट को खोजने के लिए इसका उपयोग करें।

कैरेक्टर सेट NONE का अर्थ है कि कोई चरित्र सेट धारणा नहीं है, इसलिए आप किसी भी वर्णमाला में डेटा संग्रहीत कर सकते हैं। हालांकि आप इसे उस कॉलम पर संग्रहीत या तुलना नहीं कर सकते जिसमें स्पष्ट वर्ण सेट है (शायद चरित्र सेट OCTETS को छोड़कर, इसके बारे में निश्चित नहीं है)।

यदि आप NONE का उपयोग करते हैं तो आपको यह सुनिश्चित करना होगा कि आप डेटाबेस से कनेक्ट करते समय हमेशा एक ही कनेक्शन वर्ण सेट का उपयोग करें या यदि आप एक चरित्र चरित्र सेट के रूप में वर्ण सेट NONE का उपयोग करते हैं, तो आपका एप्लिकेशन, ड्राइवर, एक्सेस घटक या प्रोग्रामिंग भाषा हमेशा एक ही एन्कोडिंग का उपयोग करती है, अन्यथा आपको लिप्यंतरण समस्याएं मिलेंगी (वर्ण एन्कोडिंग समस्याएं)।

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

सामान्य रूप से डिफ़ॉल्ट चरित्र सेट के बारे में स्पष्ट होना बेहतर होता है, जब तक आप नहीं जानते कि आप क्या कर रहे हैं।