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

Sắp xếp cột địa chỉ IP trong MySQL bằng INET_ATON

Đị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ề NULL nế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).