Как хранить как 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; то вы можете обращаться с ними одинаково.