INET_ATON() în MySQL

Transformă o adresă IPv4 (de exemplu 10.0.5.9) într-un număr întreg, ușor de comparat și indexat.

Sintaxă
INET_ATON(adresa_ip)

Ce face INET_ATON()

INET_ATON() calculează numărul care corespunde unei adrese IPv4: 10.0.5.9 devine 10×256³ + 0×256² + 5×256 + 9 = 167773449. Ca număr, o adresă ocupă 4 octeți și poate fi căutată pe intervale (toate adresele unei rețele) cu BETWEEN.

Pentru o adresă invalidă returnează NULL, cu avertisment. Inversa este INET_NTOA(). Pentru adrese IPv6 există INET6_ATON().

Parametri

Parametru Descriere
adresa_ip Adresa IPv4 ca text, cu patru numere separate prin punct.

Ce returnează

Un număr întreg sau NULL.

Exemple

Exemplul 1: Adrese transformate în numere

SELECT INET_ATON('10.0.5.9') AS adresa,
       INET_ATON('255.255.255.255') AS maxim,
       INET_ATON('300.1.1.1') AS invalida;

Rezultat

+-----------+------------+----------+
| adresa    | maxim      | invalida |
+-----------+------------+----------+
| 167773449 | 4294967295 |     NULL |
+-----------+------------+----------+
Warning (Code 1411): Incorrect string value: ''300.1.1.1'' for function inet_aton

Exemplul 2: Vizitele dintr-o rețea

CREATE TABLE vizite (ip INT UNSIGNED, pagina VARCHAR(30));
INSERT INTO vizite VALUES
  (INET_ATON('192.168.1.15'), '/produse'),
  (INET_ATON('192.168.1.200'), '/cos'),
  (INET_ATON('192.168.2.7'), '/produse'),
  (INET_ATON('10.0.0.3'), '/contact');

SELECT INET_NTOA(ip) AS ip, pagina
FROM vizite
WHERE ip BETWEEN INET_ATON('192.168.1.0') AND INET_ATON('192.168.1.255')
ORDER BY ip;

Rezultat

+---------------+----------+
| ip            | pagina   |
+---------------+----------+
| 192.168.1.15  | /produse |
| 192.168.1.200 | /cos     |
+---------------+----------+

Greșeli frecvente

  • Salvezi rezultatul într-o coloană INT cu semn. Adresele care încep cu un număr peste 127 nu încap; folosește INT UNSIGNED.
  • Folosești forme scurte ca '127.1'. Rezultatul nu este garantat; scrie mereu adresa completă, cu patru numere.

Comenzi înrudite

  • INET_NTOA(): Transformă un număr înapoi în adresă IPv4 cu puncte (inversa lui INET_ATON()).
  • BETWEEN: Verifică dacă o valoare este într-un interval, cu tot cu capete.