Как сохранить IP-адрес (v4 или v6) как int в любой базе данных с помощью php?

Мне нужно сохранить IP-адрес самым компактным способом, поиск не вызывает беспокойства. Это также должно быть совместимо с Windows, Linux и Mac с использованием любого DB (MySQL, SQLite, Postgre и т. Д.).

Благодаря функциям ip2long () и long2ip () в PHP я могу преобразовать IP4-адрес в небольшое поле int, а не в varchar (15) или что-то еще. Проблема в том, что мы находимся на этапе перехода к IP6, что означает, что большинство существующих передовых методов не работают, включая функции, которые не работают с IP6. Кроме того, функции DB, такие как INET_ATON () и INET_NTOA (), здесь не являются параметрами.

Итак, как вы храните IP-адрес как INT (или любой другой компактный формат) таким образом, который будет работать в любой системе?

РЕДАКТИРОВАТЬ: В обращении Wrang-wrang упоминается использование inet_ntop () и inet_ptop () для упаковки и распаковки IP4 или IP6. Проблема в том, что они работают только с Linux / Mac с PHP +5.1 (это не слишком большая проблема) и на окнах с +5.3 (что есть).

Если это не проблема, это их замены для поля varbinary (16), которое было рекомендовано в каждой базе данных?

    Вам просто нужно выбрать способ хранения 128 бит:

    :: / 96 – Это 96-битный префикс нулевого значения, первоначально известный как IPv4-совместимые адреса. Этот класс адресов использовался для представления адресов IPv4 в технологии перехода IPv6. Такой адрес IPv6 имеет свои первые 96 бит, равные нулю, а последние 32 бита – это IPv4-адрес, который представлен. Целевая группа Internet Engineering Task Force (IETF) отказалась от использования адресов, совместимых с IPv4, с публикацией RFC 4291. Единственным оставшимся использованием этого формата адреса является представление адреса IPv4 в таблице или базе данных с элементами фиксированного размера, которые также должны быть способны для хранения адреса IPv6.

    (от http://en.wikipedia.org/wiki/IPv6 )

    Я думаю, что два BIGINT UNSIGNED были бы разумным способом их хранения, но я думаю, вы могли бы использовать двоичный (массив байтов).

    На этот вопрос уже ответили на вопрос « Работа с адресами IPv6 в PHP» и « Как сохранить IPv6-совместимый адрес в реляционной базе данных»

    Вы можете использовать эту универсальную библиотеку php: https://github.com/akalongman/php-ip-tools