Sắp xếp chuỗi IP như '192.168.110.78' theo alphabet cho sai thứ tự (192.168.110.78 > 192.168.110.87 vì '7' > '8' ở ký tự cuối). Dùng INET_ATON() chuyển IP thành số nguyên để sắp xếp đúng.
Ví dụ minh họa
Tạo bảng và chèn IP:
CREATE TABLE DemoTable (IpAddress VARCHAR(50));
INSERT INTO DemoTable VALUES
('192.168.110.78'), ('192.168.110.87'), ('192.168.110.75');
Sắp xếp đúng thứ tự số:
SELECT * FROM DemoTable ORDER BY INET_ATON(IpAddress);
Kết quả
| IpAddress |
|---|
| 192.168.110.75 |
| 192.168.110.78 |
| 192.168.110.87 |
Giải thích
INET_ATON('192.168.110.75')= 3232236107INET_ATON('192.168.110.78')= 3232236110INET_ATON('192.168.110.87')= 3232236119- Sắp xếp số nguyên → đúng thứ tự IP.
Hàm đối ngược: INET_NTOA()
SELECT INET_NTOA(3232236107); -- '192.168.110.75'
⚠️ Hạn chế
- Chỉ hỗ trợ IPv4. IPv6 dùng
INET6_ATON()/INET6_NTOA()(MySQL 5.6+). - Trả về NULL nếu IP không hợp lệ.
Ứng dụng thực tế
- Log truy cập web, firewall, phân tích traffic.
- Tìm dải IP:
WHERE INET_ATON(ip) BETWEEN INET_ATON('192.168.1.0') AND INET_ATON('192.168.1.255') - Lưu IP dưới dạng INT UNSIGNED (4 bytes) thay vì VARCHAR(15) để tiết kiệm dung lượng và tăng tốc độ so sánh.