Как хранить как IPv4, так и IPv6 в одном столбце на SQL Server?
Должен ли я использовать binary(16)
или varbinary(16)
?
Я знаю, что могу использовать getAddress()
в java.net.InetAddress
(Java) или System.Net.IPAddress
(С#), чтобы получить представление byte[]
как IPv4
, так и IPv6
, но если мне нужно вставить IPv4
ie binary(4)
в поле binary(16)
в SQL Server
, мне нужно беспокоиться о дополнении или что-то еще?
Ответы
Ответ 1
Если вы сохраните binary(4)
в столбце binary(16)
, вы вернетесь, когда вы его прочтете, добавленное значение длины 16. Если вы хотите иметь динамическую длину, вы должны использовать varbinary(16)
. Этот тип сохраняет длину вставленных данных за счет добавления дополнительных 2 байтов на диск (фактическая длина).
Ответ 2
Используйте v4-in-v6 встраивание адресов, чтобы конвертировать ваши ipv4-адреса в формат ipv6; то вы можете обращаться с ними одинаково.