Каков правильный тип поля для IP-адреса в mysql? и каков правильный способ его хранения с помощью PHP?
Сохранение IP-адреса в базе данных MySQL с использованием PHP
Ответ 1
Этот учебник может вам помочь.
Самый эффективный способ сохранения адресов IPv4 - это поле INT (а не VARCHAR, как вы могли бы ожидать). Вы конвертируете их, используя PHP ip2long
и обратно, используя MySQL INET_NTOA
или PHP long2ip
.
Если вам нужно сохранить IPv6, вам нужно вместо этого использовать поле BINARY и PHP inet_pton
.
Ответ 2
вы можете сохранить их в двоичном поле длиной 128 бит (16 байт, BINARY(16)
или VARBINARY(16)
).
для преобразования любого IP-адреса в его двоичное представление вы можете использовать функцию php inet_pton
. этот метод будет работать как для адресов IPv4, так и для IPv6. inet_ntop
можно использовать для возврата строкового представления сохраненного ip-адреса (независимо от версии)
Ответ 3
Как правило, вы можете пойти с VARCHAR (45), поскольку он будет достаточно длинным, чтобы даже хранить IPv6.