जैसा कि अन्य ने दिखाया है, आप Oracle डेटाबेस के वर्ण सेट का उपयोग करके जावा स्ट्रिंग को बाइट सरणी में परिवर्तित कर सकते हैं और फिर उससे बाइट्स में लंबाई प्राप्त कर सकते हैं। हालांकि, यह जानने पर निर्भर करता है कि आपके डेटाबेस का कैरेक्टर सेट क्या है-- अलग-अलग डेटाबेस में अलग-अलग कैरेक्टर सेट होंगे, जिसके परिणामस्वरूप अलग-अलग कैरेक्टर सेट में एक ही स्ट्रिंग के लिए अलग-अलग बाइट लंबाई होगी।
यह मानते हुए कि आपका डेटाबेस UTF-8 (NLS_CHARACTERSET
जैसे चर-चौड़ाई वाले वर्ण सेट का उपयोग कर रहा है) AL32UTF8 का), आप बाइट लंबाई के बजाय वर्ण लंबाई के आधार पर Oracle में कॉलम भी घोषित कर सकते हैं। यह आपके कोड को सरल बना सकता है क्योंकि आप केवल अपनी स्ट्रिंग की वर्ण लंबाई की जांच कर सकते हैं। यह उपयोगकर्ताओं के लिए संचार को भी सरल करता है। उपयोगकर्ताओं के लिए यह समझना आम तौर पर कठिन होता है कि कोई फ़ील्ड कभी-कभी 5 वर्णों को क्यों संग्रहीत कर सकता है जबकि दूसरी बार यह 2 वर्ण स्ट्रिंग को अस्वीकार कर देता है जो कि स्ट्रिंग का हिस्सा हैं (UTF-8 वर्ण सेट में 1 वर्ण के लिए 3 बाइट्स की आवश्यकता हो सकती है) भंडारण की)।
डिफ़ॉल्ट रूप से, जब आप एक कॉलम घोषित करते हैं
CREATE TABLE foo (
col_name VARCHAR2(5)
);
जो Oracle को 5 बाइट डेटा तक की अनुमति देने के लिए कहता है। यदि आप बाइट्स की संख्या की परवाह किए बिना डेटा के 5 वर्णों की अनुमति देना चाहते हैं, हालांकि, आप वर्ण लंबाई शब्दार्थ का उपयोग कर सकते हैं
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
यह मानते हुए कि आप अपना DDL चलाते समय अपनी सभी तालिकाओं के लिए ऐसा करना चाहते हैं, आप nls_length_semantics
भी सेट कर सकते हैं अपना डीडीएल चलाने से पहले सत्र स्तर पर
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
एक स्तंभ के साथ एक तालिका बनाता है जो डेटा के 5 वर्णों तक की अनुमति देता है।