Как хранить оба IPv4 или IPv6 в одном столбце в SQL Server? - PullRequest
11 голосов
/ 25 августа 2010

Должен ли я использовать binary(16) или varbinary(16)?

Я знаю, что могу использовать getAddress() в java.net.InetAddress (Java) или System.Net.IPAddress (C #), чтобы получить byte[] представление как IPv4, так и IPv6, но если мне нужно вставить IPv4 то есть binary(4) в binary(16) поле в SQL Server, мне нужно беспокоиться о заполнении или чем-то еще?

Ответы [ 2 ]

15 голосов
/ 25 августа 2010

Если вы храните binary(4) в столбце binary(16), вы получите, когда прочитаете его, заполненное значение длины 16. Если вы хотите иметь динамическую длину, вы должны использовать varbinary(16).Этот тип сохраняет длину вставленных данных за счет добавления дополнительных 2 байтов на диске (фактическая длина).

7 голосов
/ 25 августа 2010

Используйте встраивание адреса v4-in-v6 для преобразования адресов ipv4 в формат ipv6; тогда вы можете относиться ко всем одинаково.

...