我应该使用binary(16)
还是varbinary(16)
?如何在SQL Server中的单列中存储IPv4或IPv6?
我知道我可以使用getAddress()
在java.net.InetAddress
(JAVA)或System.Net.IPAddress
(C#),以同时获得IPv4
和IPv6
的byte[]
表示,但如果我需要插入IPv4
即binary(4)
成binary(16)
领域SQL Server
,我需要担心填充或任何东西?
我应该使用binary(16)
还是varbinary(16)
?如何在SQL Server中的单列中存储IPv4或IPv6?
我知道我可以使用getAddress()
在java.net.InetAddress
(JAVA)或System.Net.IPAddress
(C#),以同时获得IPv4
和IPv6
的byte[]
表示,但如果我需要插入IPv4
即binary(4)
成binary(16)
领域SQL Server
,我需要担心填充或任何东西?
如果您在binary(16)
列中存储了binary(4)
列,那么当您读取它时,将返回长度为16的填充值。如果要具有动态长度,则必须使用varbinary(16)
。这种类型保留了插入数据的长度,但需要额外增加2个字节(实际长度)。
使用v4-in-v6 address embedding将您的ipv4地址转换为ipv6格式;那么你可以全部对待他们。
由于我预计IP的大部分仍然在IPv4中,我猜varbinary(16)是有意义的。 – Henry 2010-08-25 00:03:46
创建可变长度字段的成本 – NullUserException 2010-08-25 00:04:16
有关确切的成本详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms178085.aspx和/或http://sqlskills.com/blogs/paul /post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx – 2010-08-25 00:16:22