2010-08-24 11 views
10

क्या मुझे binary(16) या varbinary(16) का उपयोग करना चाहिए?एसक्यूएल सर्वर में एकल कॉलम में आईपीवी 4 या आईपीवी 6 दोनों को कैसे स्टोर करें?

मैं जानता हूँ कि मैं java.net.InetAddress (जावा) या System.Net.IPAddress (सी #) में getAddress() उपयोग कर सकते हैं IPv4 और IPv6 दोनों का एक byte[] प्रतिनिधित्व प्राप्त करने के लिए, लेकिन अगर मैं, SQL Server में एक binary(16) क्षेत्र में IPv4 यानी binary(4) डालने की आवश्यकता की आवश्यकता है पैडिंग या कुछ भी चिंता करने के लिए?

उत्तर

15

यदि आप एक binary(16) कॉलम में एक binary(4) की दुकान आप वापस मिल जाएगा, जब आप इसे पढ़, लंबाई 16 वर्ष की एक गद्देदार मूल्य आप गतिशील लंबाई आप एक varbinary(16) का उपयोग करना चाहिए करना चाहते हैं। इस प्रकार डिस्क पर अतिरिक्त 2 बाइट जोड़ने (वास्तविक लंबाई) जोड़ने की लागत पर डाले गए डेटा की लंबाई को बरकरार रखता है।

+0

चूंकि मुझे उम्मीद है कि अधिकांश आईपी अभी भी आईपीवी 4 में होगा, मुझे लगता है कि varbinary (16) समझ में आता है। – Henry

+0

और परिवर्तनीय लंबाई फ़ील्ड बनाने की लागत – NullUserException

+1

सटीक लागत विवरण के लिए http://msdn.microsoft.com/en-us/library/ms178085.aspx और/या http://sqlskills.com/blogs/paul देखें /post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx –

7

अपने आईपीवी 4 पते को ipv6 प्रारूप में बदलने के लिए v4-in-v6 address embedding का उपयोग करें; तो आप उन सभी को समान रूप से इलाज कर सकते हैं।

+0

यह बाइनरी (4) की तरह नहीं होगा, जिसमें 12x शून्य बाइट पैडिंग होगा? – Henry

+3

संभवतः आप इस डेटाबेस कॉलम में कुछ प्रविष्टियों को वास्तविक ipv6 पते होने की उम्मीद करते हैं। V4-in-v6 एम्बेडिंग का बिंदु यह है कि आपके अधिक एप्लिकेशन कोड को अंतर की परवाह नहीं करनी होगी (यह केवल दिखा सकता है कि इसमें वी 6 पते के अलावा कुछ भी नहीं है)। – zwol

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