18
марта
2008

Хранение IP в таблице MySQL

Иногда полезная информация попадается на глаза тогда, когда необходимость в ней уже или еще отсутствует. Например, я только что нашел на сайте MyMans.org описание функций, с помощью которых в базе MySQL можно удобно хранить IP адреса, используя поле типа INT. Абсолютно правильная, кстати, идея — это гораздо эффективнее с точки зрения системных ресурсов, чем отводить текстовое поле (встречавшееся решение).

Пример кода:

SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-- 2130706433, 2130706433

SELECT INET_NTOA(3520061480); -- '209.207.224.40'

SELECT * FROM Sessions WHERE ip_address BETWEEN INET_ATON('192.168.0.1') AND INET_ATON('192.168.0.255');

От себя могу добавить, что эти функции появились начиная с версии 3.23.15, поэтому их использование никак не ухудшит переносимость скриптов.

Кстати, очень рекомендую MyMans всем, кто его еще не видел. Весьма полезный коллективный блог по вебдеву.

Комментарии к заметке «Хранение IP в таблице MySQL»

# va1en0k: (18 марта, 2008 @ 06:28)

а новые ипы поддерживает?

# admin: (18 марта, 2008 @ 06:50)

va1en0k: В документации сказано «Addresses may be 4- or 8-byte addresses». Это значит, IP6 поддерживается. Сам пока не проверял.

# Юрий: (10 марта, 2011 @ 11:58)

Кстати для справки нужно использовать UNSIGNED INT, на некоторых IP в противном случае глючить будет. Сам попался на такое:)

# DLEVOODOO: (15 апреля, 2011 @ 01:37)

Спасибо за статью!

Написать комментарий

Можно использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .