Для хранения IP-адресов в MySQL наиболее подходящим типом данных является тип VARBINARY(16), который представляет IP-адрес как 16-байтовое двоичное значение. VARBINARY - это тип данных в MySQL, который используется для хранения двоичных данных переменной длины.
Поиск IP-адреса по точному значению:
# функция INET6_NTOA() преобразует значение столбца ip из двоичного формата в текстовый формат
SELECT
*
FROM
`table`
WHERE
INET6_NTOA( `ip` ) = '192.168.1.1'
# обратный подход, когда мы преобразуем ip адрес функцией INET6_ATON
# и сравниваем с сохранённым значением
SELECT
*
FROM
`tabke`
WHERE
`ip` = INET6_ATON( '192.168.1.1' )
Поиск IP-адресов, начинающихся с заданного префикса:
SELECT * FROM `table` WHERE INET6_NTOA( `ip` ) LIKE '192.168.1.%'
Независимо от выбранного типа данных, вам также может потребоваться преобразовать IP-адрес в двоичное значение перед сохранением его в базу данных, а затем преобразовать обратно в строковый формат при извлечении данных из базы данных. Для этого в PHP существуют специальные функции, такие как inet_pton() и inet_ntop().
# Пример использования inet_pton() для преобразования IP-адреса в двоичное представление $ip = '192.168.0.1'; $binIp = inet_pton( $ip ); echo bin2hex( $binIp ); // > c0a80001 # Пример использования inet_ntop() для преобразования двоичного представления IP-адреса в строку $binIp = hex2bin( 'c0a80001' ); $ip = inet_ntop( $binIp ); echo $ip; // > 192.168.0.1
Комментарии
0Нашли ошибку или хотите дополнить материал?