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

VARCHAR अधिकतम लंबाई 4000 है लेकिन केवल 2666 बाइट लंबा थाई पाठ संग्रहीत किया जा सकता है

समस्या

VARCHAR का वर्णन करते समय, आपको एक इकाई की आपूर्ति करनी चाहिए, उदा। VARCHAR2(200 BYTE) या VARCHAR2(200 CHAR) . यदि आप इकाई को छोड़ देते हैं, तो डिफ़ॉल्ट BYTE है (Oracle डेटाबेस कॉन्सेप्ट देखें, अध्याय Oracle Datatypes ए> ) यह एक मामूली विवरण की तरह लगता है, लेकिन जब आपके पास मल्टी बाइट कैरेक्टर सेट होते हैं, तो यह काफी गंभीर हो जाता है।

11g तक की स्थिति

दुर्भाग्य से VARCHAR2 कॉलम के अधिकतम आकार की एक कठिन सीमा है। यह 4000 BYTEs (!) है (Oracle डेटाबेस संदर्भ देखें, अध्याय ओरेकल डेटाटाइप ) Oracle 11g तक और . यह एक कठिन सीमा है और इसके आसपास कोई रास्ता नहीं है। इसका एकमात्र तरीका CLOB कॉलम है।

12c के लिए समाधान

Oracle 12c पर स्थिति अलग है। वहां आप पैरामीटर का उपयोग कर सकते हैं MAX_STRING_SIZE = EXTENDED 32767 BYTEs तक की सीमा बढ़ाने के लिए (Oracle डेटाबेस भाषा संदर्भ देखें, अध्याय डेटा प्रकार और Oracle डेटाबेस संदर्भ, अध्याय आरंभीकरण पैरामीटर ) तो स्पष्ट समाधान है:Oracle 12c में अपग्रेड करें, MAX_STRING_SIZE = EXTENDED सेट करें दस्तावेजों के अनुसार और अपनी तालिका परिभाषा बदलें। अपनी तालिका में परिवर्तन करते समय आप कुछ अनुक्रमणिका खो सकते हैं, क्योंकि पहले 12c तक के अनुक्रमणिका 4000 से अधिक BYTE के साथ VARCHAR2 मान नहीं रख सकते थे और अभी भी कुछ सीमाएँ हो सकती हैं। (मुझे इंडेक्स के साथ समस्या की जांच करनी है और अगर इसे इंडेक्स के पुनर्निर्माण के द्वारा ठीक किया जा सकता है)।

समाधान:डेटाबेस एन्कोडिंग बदलें

आप अपने मूल डेटाबेस एन्कोडिंग को बदलने का प्रयास कर सकते हैं (जिस तरह से आपका डेटाबेस CHARs को BYTEs में मैप करता है)। इसके लिए आपको आमतौर पर एक नया डेटाबेस बनाना होगा और NLS_CHARACTERSET के लिए उपयुक्त पैरामीटर प्रदान करना होगा। यह आपके डेटाबेस के संचालन के तरीके में एक बहुत बड़ा बदलाव है और इसके कई दुष्प्रभाव हो सकते हैं। यदि आप कभी भी भिन्न एन्कोडिंग में वर्ण जोड़ने का प्रयास करते हैं, तो आप भाग्य से बाहर हो सकते हैं (अर्थात आप उन्हें अपने डेटाबेस में संग्रहीत नहीं कर सकते)। इसलिए मैं इस समाधान का सुझाव नहीं दूंगा।

समाधान:CLOB पर स्विच करें

आम तौर पर ऐसे बड़े टेक्स्ट फ़ील्ड पर मनमाने ढंग से प्रश्न प्रदान करने की आवश्यकता नहीं होती है। आप बड़े टेक्स्ट कॉलम पर चयनित प्रश्नों की पहचान करने का प्रयास कर सकते हैं और उन्हें Oracle Text पर माइग्रेट कर सकते हैं। एक CLOB कॉलम पर। लेकिन यह एक बहुत बड़ा बदलाव है और आपके मौजूदा स्कीमा या आपके आवेदन के साथ संभव नहीं हो सकता है। आप "इनस्टेड ऑफ़" ट्रिगर्स के एक समूह के साथ समाप्त हो सकते हैं और कुछ अनुपलब्ध बाधा जांच (नए बनाए गए सीएलओबी कॉलम को शामिल करते हुए) के साथ समाप्त हो सकते हैं।

समाधान:XML का उपयोग करें

सीएलओबी के बजाय आप अपनी स्ट्रिंग को एक्सएमएल कॉलम के रूप में स्टोर करने का प्रयास कर सकते हैं। इनके लिए अधिकतम आकार 4GB है। यह आपके प्रदर्शन को नुकसान पहुंचाएगा, आपको ट्रिगर्स के बजाय प्रदान करना होगा और आप कुछ बाधाओं को खो सकते हैं, लेकिन यह आपके लिए काम कर सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डॉकटर कंटेनर में ओरेकल क्लाइंट स्थापित करें

  2. LISTAGG अजीब संयोजन

  3. कौन सा डाउनलोड करना है:JDK या JRE?

  4. हाइफ़न वर्ण सहित Oracle क्वेरी स्ट्रिंग

  5. वीबी6 एप्लीकेशन ऑरैकल 12 64 बिट कनेक्शन