Oracle में, नेटवर्क पतों का प्रतिनिधित्व करने के लिए उपयुक्त डेटा प्रकार या तकनीक क्या है, जो पते IPv4 या IPv6 हो सकते हैं
दो दृष्टिकोण हैं:
- केवल भंडारण।
- पारंपरिक प्रतिनिधित्व को संग्रहित करना
भंडारण के लिए ही। एक IPV4 पता एक पूर्णांक होना चाहिए (32 बिट पर्याप्त हैं)। IP V6 के लिए, 128 बिट्स, INTEGER (जो संख्या (38) के समान है) करेगा। बेशक, वह भंडारण कर रहा है। यह दृष्टिकोण यह मानता है कि प्रतिनिधित्व आवेदन के लिए एक मामला है।
यदि कोई विपरीत रणनीति अपनाता है, तो पारंपरिक प्रतिनिधित्व को संग्रहीत करने के लिए, किसी को यह सुनिश्चित करने की आवश्यकता है कि IP V4 और IPV6 पतों में केवल एक पारंपरिक (स्ट्रिंग) प्रतिनिधित्व है। यह ipV4 के लिए प्रसिद्ध है। IPV6 के लिए, एक मानक प्रारूप भी है।
मेरी प्राथमिकता पहली रणनीति को जाती है। सबसे खराब स्थिति में, आप एक हाइब्रिड दृष्टिकोण (हालांकि गैर एसिड) अपना सकते हैं और बाइनरी और एएससीआई प्रतिनिधित्व दोनों को "प्राथमिकता" के साथ बाइनरी मान में स्टोर कर सकते हैं।
<ब्लॉकक्वॉट>हालांकि, किसी भी पंक्ति में v4 और v6 दोनों पते नहीं हैं।
IPV6 प्रारूप में IPV4 पते का मानक प्रतिनिधित्व है:::ffff:192.0.2.128
।
मैं संदर्भ नहीं जानता, लेकिन मैं 2 कॉलम आरक्षित रखूंगा, एक आईपीवी4 के लिए और दूसरा एक अलग आईपीवी6 पते के लिए।
अपडेट करें
@sleepyMonad's द्वारा एक अच्छी टिप्पणी के बाद, मैं यह बताना चाहूंगा कि संख्या के बजाय डेटा प्रकार INTEGER डेटा प्रकार का उपयोग करना बेहतर होता है, जो कि 128 बिट पूर्णांक 'ff...ff' (जिसे 39 की आवश्यकता होगी) के साथ व्यक्त किए जा सकने वाले उच्चतम संभव मान को खुशी से समायोजित करेगा। दशमलव अंक)। 38 दस की उच्चतम शक्ति है 0 से 9 तक जिसे 128 बिट्स पर एन्कोड किया जा सकता है लेकिन कोई भी 2**128 - 1 के लिए अधिकतम अहस्ताक्षरित मान सम्मिलित कर सकता है (दशमलव 340282366920938463463374607431768211455)। इस संभावना को स्पष्ट करने के लिए यहां एक छोटा परीक्षण दिया गया है।
create table test (
id integer primary key,
ipv6_address_bin INTEGER );
-- Let's enter 2**128 - 1 in the nueric field
insert into test (id, ipv6_address_bin) values ( 1, to_number ( 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') ) ;
-- retrieve it to make sure it's not "truncated".
select to_char ( ipv6_address_bin, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' ) from test where id = 1 ;
-- yields 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
select to_char ( ipv6_address_bin ) from test where id = 1 ;
-- yields 340282366920938463463374607431768211455
select LOG(2, ipv6_address_bin) from test where id = 1 ;
-- yields 128
select LOG(10, ipv6_address_bin) from test where id = 1 ;
-- yields > 38