2012-05-14 10 views
6

ठीक है, अब मुझे पता है कि इसी तरह के प्रश्नों को शायद दस लाख बार पूछा गया है लेकिन मैं इस पर एक असली नौसिखिया हूं और मैं वास्तव में आपकी मदद की सराहना करता हूं।MySQL डेटाबेस (आईपीवी 4 और आईपीवी 6) में आईपी पता संग्रहीत करना

असल में, मैं आगंतुकों को बाद में पुनर्प्राप्ति और सत्यापन के लिए एक MySQL में आईपी पता स्टोर करना चाहता हूं। मुझे सबसे पहले पता होना चाहिए कि आईपी एड्रेस को स्टोर करने के लिए मुझे किस प्रकार का क्षेत्र उपयोग करने की ज़रूरत है। मैं सिस्टम को आईपीवी 6 पते के साथ संगत बनाना भी चाहूंगा।

अग्रिम धन्यवाद

+1

पते के लिए आपके मुख्य उपयोग के मामले क्या हैं? क्या आप उनसे पूछने जा रहे हैं? कुछ सबनेटिंग नियमों के अनुसार उन्हें विभाजित करें और क्वेरी करें? या वे सिर्फ प्रदर्शन के लिए संग्रहीत हैं? –

+2

इसे आज़माएं: http://stackoverflow.com/questions/2049681/store-ipv6-in-डेटा – Mark

+0

वैसे यह एक पुष्टिकरण लिंक के लिए है। मैं यह सुनिश्चित करना चाहता हूं कि उसी आईपी पते से पुष्टिकरण लिंक का दौरा किया गया था जिस पर इसे उत्पन्न किया गया था। तो मैं उनसे पूछताछ करने जा रहा हूं] – Andy

उत्तर

9

एक IPv4 संग्रहीत करने के लिए आप एक INT UNSIGNED उपयोग कर सकते हैं है, जबकि एक IPv6 के लिए आप एक decimal(39,0), जरूरत तालिका में एक आईपी स्टोर करने के लिए आप समारोह INET_ATON उपयोग कर सकते हैं:

INSERT INTO table (ipcol) VALUES (INET_ATON('192.168.0.10')); 

और इसे वापस पुनः प्राप्त समारोह INET_NTOA साथ:

SELECT INET_NTOA(ipcol) AS ip FROM table; 

यह MySQL IPv6 समर्थन से पहले मौजूद है; उपयोगकर्ताओं को यह पता होना चाहिए कि MySQL अब आईपीवी 6 का समर्थन करता है:https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html

+0

तक MySQL में उपलब्ध नहीं है, लेकिन मैंने सोचा कि मैंने अभी पढ़ा है कि 'INET_ATON() 'IPv6 का समर्थन नहीं करता है। और यहां तक ​​कि अगर ऐसा होता है, तो मैं PHP का उपयोग करके आईपीवी 6 पता कैसे प्राप्त करूं? – Andy

+0

inet_pton के साथ प्रयास करें: http://php.net/manual/en/function.inet-pton.php – aleroot

+0

पर्याप्त मेला, धन्यवाद। अब, मैं PHP में उपयोगकर्ताओं को आईपी पता खोजने के बारे में कैसे जा सकता हूं? – Andy

1

वहाँ MySQL काफी बड़ा एक IPv6 पता स्टोर करने के लिए में कोई अभिन्न प्रकार है। इसे स्टोर करने का सबसे कॉम्पैक्ट तरीका BINARY(16) जैसा कुछ है। यदि आपको केवल पते को स्टोर करने और पुनर्प्राप्त करने की आवश्यकता है और आपको उन पर तार्किक संचालन करने की आवश्यकता नहीं है (उदा। नेटमास्क ऑपरेशंस क्वेरी करने के लिए जिनके लिए आईपी पते कवरिंग उपसर्ग के अंतर्गत आते हैं) तो यह पर्याप्त होगा। यदि आपको तार्किक या बिट ऑपरेशंस करने की आवश्यकता है, तो आपको फैनसीयर होने की आवश्यकता होगी: आपको आईपीवी 6 पते दो अलग-अलग 64-बिट पूर्णांक कॉलम में स्टोर करने की आवश्यकता होगी।

+0

नहीं, मुझे कुछ और फैंसी करने की आवश्यकता नहीं है (केवल एक क्वेरी में उन्हें पुनः प्राप्त/तुलना करना)। तो अब मुझे यह जानने की जरूरत है कि मैं PHP का उपयोग कर उपयोगकर्ता का आईपी पता कैसे प्राप्त कर सकता हूं? – Andy

4

मैं डेटा प्रकार के लिए VARBINARY (16) का उपयोग करें और आईपी संख्या (जो मैं बाद में रिवर्स समारोह, INET_NTOA() का उपयोग करके पढ़ा डालने के लिए MySQL समारोह INET_ATON() का उपयोग करें।

+0

तो, क्या VARBINARY (16) आईपीवी 4 और आईपीवी 6 दोनों का समर्थन करेगा? और मैं PHP का उपयोग कर आगंतुकों का आईपी पता कैसे ढूंढूं? – Andy

+1

आपको INET6_NTOA और INTE6_ATON का उपयोग करना होगा, लेकिन यह संस्करण 5.6.3 –

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