Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp địa chỉ IP theo thứ tự số trong MySQL với INET_ATON()

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') = 3232236107
  • INET_ATON('192.168.110.78') = 3232236110
  • INET_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.