2011-09-19 14 views
26

मैं कोड स्कीमा घोषणा नीचे है कि समर्थन कर रहा हूँ: -varchar2 (एन बाइट | CHAR) डिफ़ॉल्ट -> CHAR या बाइट

create table sample (
     id number Primary key, 
     username varchar2(100), 
); 

मैं & varchar2 दो घोषणा मोड varchar2 ओरेकल प्रलेखन पर देखा (एन BYTE) और varchar2 (n CHAR), अगर मैं स्पष्ट रूप से BYTE या CHAR & निर्दिष्ट नहीं करता हूं तो उपयोगकर्ता नाम Varchar2 (500) घोषित करें तो 500 BYTES आवंटित किए जाएंगे या 500 वर्ण होंगे?

धन्यवाद,

उत्तर

30

डिफ़ॉल्ट जो भी आपके NLS_LENGTH_SEMANTICS पैरामीटर के लिए सेट कर दिया जाता हो जाएगा। डिफ़ॉल्ट रूप से, यह BYTE है ओरेकल के पुराने संस्करणों के अनुरूप होने के लिए जहां चरित्र लंबाई अर्थशास्त्र का उपयोग करने का कोई विकल्प नहीं था। यदि आप अपनी खुद की स्कीमा को परिभाषित कर रहे हैं और आप एक चर चौड़ाई वर्ण सेट (जैसे AL32UTF8) का उपयोग कर रहे हैं, तो मैं दृढ़ता से NLS_LENGTH_SEMANTICS को CHAR में सेट करने की अनुशंसा करता हूं क्योंकि आप लगभग हमेशा बाइट्स में वर्णों में लंबाई निर्दिष्ट करने का इरादा रखते हैं।

+13

आप को जोड़ने के लिए है कि CHAR को NLS_LENGTH_SEMANTICS की स्थापना * नहीं * ** बाइट्स 4000 की सीमा पर काबू पाने जाएगा एक VARCHAR स्तंभ के लिए ** चाहते हो सकता है। –

+1

[इस] पर (https://docs.oracle.com/cd/E24693_01/server.11203/e24448/initparams149.htm) पृष्ठ यह कहता है: _Caution: ओरेकल दृढ़ता से अनुशंसा करता है कि आप CHL को NLS_LENGTH_SEMANTICS पैरामीटर सेट न करें उदाहरण या सर्वर पैरामीटर फ़ाइल में। इससे कई मौजूदा इंस्टॉलेशन स्क्रिप्ट अप्रत्याशित रूप से कैरेक्टर लम्बाई सेमेन्टिक्स के साथ कॉलम बना सकती हैं, जिसके परिणामस्वरूप बफर ओवरफ्लोज़ सहित रनटाइम त्रुटियां होती हैं। जैसा कि आपने कहा था कि यह लगभग हमेशा पात्रों में लंबाई निर्दिष्ट करने का इरादा रखता है। वह वास्तव में मुझे निराश करता है। मुझे क्या पता होना चाहिए, हर अब और फिर मुझे कुछ कॉलम आकार बढ़ाने की जरूरत है। – mkb

+2

@mkb - पैरामीटर सत्र स्तर पर भी सेट किया जा सकता है। जब आप अपनी ऑब्जेक्ट्स को परिभाषित कर रहे हैं तो सत्र स्तर पर पैरामीटर सेट करें यदि आप इसे आवृत्ति स्तर पर सेट करने का जोखिम नहीं चाहते हैं। या ओरेकल इंस्टॉलेशन स्क्रिप्ट चलाने से पहले इसे बस स्तर स्तर पर BYTE पर सेट करें। –

8

आप अपने वर्तमान मूल्य की जाँच निम्न क्वेरी का उपयोग कर सकता है:

SELECT 
    value 

FROM 
    NLS_DATABASE_PARAMETERS 

WHERE 
    parameter='NLS_LENGTH_SEMANTICS'; 
+1

इसका 'मूल्य' और 'वैल' –

+0

@ अहिजिथ मेड सुधार। –

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