Вы можете авторизоваться через ВКонтакте, Фейсбук и оставить комментарий


Как хранить IP-адрес (MySQL)

Хранить IP-адрес можно в поле типа VARCHAR(15), но лучше в поле типа UNSIGNED INT. В MySQL есть функция INET_ATON(), которая преобразует IP-адрес в тип INT.

Если необходимо искать IP-адрес в каком-либо диапазоне, например при определении города, то хранить придется только в UNSIGNED INT..

Таблица IP-адресов

Создадим таблицу IP-адресов.

1
2
3
4
5
6
CREATE TABLE  `test`.`ip` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ip1` int(10) unsigned NOT NULL DEFAULT '0',
  `ip2` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Заполнение

Заполним таблицу несколькими записями.

1
2
3
4
5
6
INSERT INTO ip (`ip1`, `ip2`) VALUES
(INET_ATON('1.1.1.1'), INET_ATON('10.10.10.10')),
(INET_ATON('11.11.11.11'), INET_ATON('20.20.20.20')),
(INET_ATON('94.100.100.0'), INET_ATON('94.255.255.255')),
(INET_ATON('140.1.1.1'), INET_ATON('170.255.255.255')),
(INET_ATON('200.1.1.1'), INET_ATON('255.255.255.255'));

Выборка данных

Так же в MySQL есть функция INET_NTOA() — преобразование числа в IP-адрес.

1SELECT `id`, `ip1`, INET_NTOA(`ip1`), `ip2`, INET_NTOA(`ip2`) FROM ip i;
id ip1 INET_NTOA(`ip1`) ip2 INET_NTOA(`ip2`)
1168430091.1.1.116843009010.10.10.10
218527309911.11.11.1133686018020.20.20.20
3158363750494.100.100.0159383551994.255.255.255
42348876033140.1.1.12868903935170.255.255.255
53355508993200.1.1.14294967295255.255.255.255

Как видно из результатов функция INET_NTOA() отлично преобразует число обратно в исходный IP-адрес.

Выбор из диапазона IP-адресов

Например у нас есть IP-адрес 225.43.64.221 — INET_ATON('225.43.64.221') равен 3777708253.

1SELECT `id`, `ip1`, `ip2` FROM `ip` WHERE INET_ATON('225.43.64.221') BETWEEN `ip1` AND `ip2`;

Результат

IP-адрес входит в один из диапазонов.

id ip1 ip2
533555089934294967295
Опубликовано: 14 декабря 2011  ·  Автор: Артём Фёдоров  ·  11781 просмотр

Категория

ГлавнаяСУБДMySQLКак хранить IP-адрес (MySQL)

Чтобы оставить комментарий нужно авторизоваться на сайте
или войти через ВКонтакте или Фейсбук

Войти через ФейсбукВойти через Твиттер

Комментарии

Что значит пропустить?
Артём Фёдоров · 3 года назад
Подскажите а как пропустить пару адресов из вашего диапозона ?
Серожа Кривой · 3 года назад
Всегда пожалуйста.
Артём Фёдоров · 5 лет назад
Спасибо за статью. Проверил - все работает!
· 5 лет назад
MySQL, СУБД

© 2010-2017 expange.ru
При полном или частичном копировании статей сайта, ссылка на источник обязательна.

Хотите узнать больше информации, пишите на: artem@expange.ru

Полезное онлайн  ·  Новости  ·  Изображения  ·  Статьи по датам

О проекте  ·  Правила пользования  ·  Представительства

Благодарности и пожелания