СУБД MySQL и хранение IP адресов.

Довольно часто при web программировании (да и не только web) необходимо сохранять IP адреса в таблице СУБД MySQL. Самым простым кажется вариант сохранения в поле типа VARCHAR(15), но этот вариант имеет ряд недостатков. Например, объём и скорость обработки. В обоих случаях при сравнении с полями типа INTVARCHAR проигрывает. Но как сохранить IP адрес в поле типа INTEGER?

Для этого в MySQL существует функция INET_ATON() и обратная ей INET_NTOA() .

Рассмотрим их в наглядных примерах.

Создадим таблицу, предназначенную для хранения IP адресов:

 

CREATE TABLE  db_example.addr (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
ip_addr int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (id)
)

 

 

и наполним её данными:

 

INSERT INTO addr (ip_addr) VALUES
(INET_ATON('122.141.251.42')),
(INET_ATON('218.2.0.129')),
(INET_ATON('122.225.109.205')),
(INET_ATON('61.183.1.8')),
(INET_ATON('122.225.109.219'));

 

 

В базе это выглядит так:

1
2
3
4
5

 

Теперь извлечём данные из таблицы используя функцию INET_NTOA():

 

SELECT id,  INET_NTOA(ip_addr) FROM addr;

 

 

и в итоге получим:

4 218.2.0.129
3 122.141.251.42
5 122.225.109.205
6 61.183.1.8
7 122.225.109.219

Такой способ хранения IP адресов даёт возможность выборки по диапазону (например, адреса принадлежащие одному провайдеру):

 

SELECT id, INET_NTOA(ip_addr) FROM addr WHERE ip_addr BETWEEN INET_ATON('122.225.109.1') AND INET_ATON('122.225.109.255');

 

 

Помогла заметка - поделись с другом:
  1. Комментов пока нет

  1. Трэкбэков пока нет.

Оставьте эти два поля как есть:


 
Яндекс.Метрика