IP पते को स्ट्रिंग के रूप में सॉर्ट करने पर '192.168.1.100' '192.168.1.2' से पहले आ जाता है। INET_ATON() IP पते को संख्या में बदलकर सही संख्यात्मक क्रम देता है।
समस्या: स्ट्रिंग सॉर्ट
ORDER BY IpAddress -- परिणाम: 192.168.1.100, 192.168.1.2, 192.168.1.20 (गलत)
समाधान: INET_ATON()
ORDER BY INET_ATON(IpAddress) -- परिणाम: 192.168.1.2, 192.168.1.20, 192.168.1.100 (सही)
उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable (IpAddress VARCHAR(50));
2. डेटा डालें
mysql> INSERT INTO DemoTable VALUES('192.168.110.78');
mysql> INSERT INTO DemoTable VALUES('192.168.110.87');
mysql> INSERT INTO DemoTable VALUES('192.168.110.75');
3. INET_ATON के साथ सॉर्ट
mysql> SELECT * FROM DemoTable
-> ORDER BY INET_ATON(IpAddress);
4. परिणाम
+----------------+ | IpAddress | +----------------+ | 192.168.110.75 | | 192.168.110.78 | | 192.168.110.87 | +----------------+
INET_ATON / INET_NTOA
| फ़ंक्शन | कार्य | उदाहरण |
|---|---|---|
| INET_ATON() | IP स्ट्रिंग → पूर्णांक | INET_ATON('192.168.1.1') = 3232235777 |
| INET_NTOA() | पूर्णांक → IP स्ट्रिंग | INET_NTOA(3232235777) = '192.168.1.1' |
IPv6 के लिए (MySQL 8.0+)
INET6_ATON() -- IPv6 स्ट्रिंग → बाइनरी (VARBINARY) INET6_NTOA() -- बाइनरी → IPv6 स्ट्रिंग -- सॉर्टिंग ORDER BY INET6_ATON(ipv6_address)
प्रदर्शन टिप
- बड़े टेबल के लिए,
ip_int INT UNSIGNEDकॉलम जोड़ें और उस पर इंडेक्स बनाएं - INSERT/UPDATE ट्रिगर से
INET_ATON()स्वचालित भरें - क्वेरी में
ORDER BY ip_intउपयोग करें
स्टोरेज अनुशंसा
IPv4 के लिए INT UNSIGNED (4 बाइट्स), IPv6 के लिए VARBINARY(16) या BINARY(16) उपयोग करें। स्ट्रिंग (VARCHAR) स्टोरेज और सॉर्टिंग दोनों के लिए अकुशल है।