Địa chỉ IP (IPv4) lưu dưới dạng chuỗi '192.168.110.78' sắp xếp theo chữ cái sẽ sai (ví dụ: 192.168.110.100 < 192.168.110.78). Hàm INET_ATON() chuyển IPv4 thành số nguyên không dấu (32-bit), cho phép sắp xếp và so sánh đúng theo giá trị số.
Cú pháp
SELECT * FROM ten_bang ORDER BY INET_ATON(cot_ip);
Ví dụ minh họa
mysql> CREATE TABLE DemoTable (IpAddress VARCHAR(50));
mysql> INSERT INTO DemoTable VALUES
-> ('192.168.110.78'), ('192.168.110.87'), ('192.168.110.75');
mysql> SELECT * FROM DemoTable ORDER BY INET_ATON(IpAddress);
Kết quả (sắp xếp đúng số: 75, 78, 87):
+----------------+ | IpAddress | +----------------+ | 192.168.110.75 | | 192.168.110.78 | | 192.168.110.87 | +----------------+
Hàm bổ sung
INET_NTOA(so_nguyen): chuyển ngược từ số → chuỗi IP.INET6_ATON(),INET6_NTOA(): hỗ trợ IPv6 (trả về VARBINARY/chuỗi hex).
Ứng dụng thực tế
- Lưu IP: dùng
INT UNSIGNED(4 bytes) thay vì VARCHAR(15) – tiết kiệm, nhanh, dễ so sánh/khoảng (BETWEEN). - Khi hiển thị:
SELECT INET_NTOA(ip_int) FROM bang. - Tìm IP trong dải:
WHERE ip_int BETWEEN INET_ATON('192.168.1.0') AND INET_ATON('192.168.1.255').
⚠️ Lưu ý
INET_ATON()trả vềNULLnếu IP không hợp lệ.- Chỉ hoạt động chuẩn cho IPv4. IPv6 dùng cặp hàm INET6_*.
- MySQL 8.0+: có kiểu dữ liệu gốc
INET6(chưa phổ biến).