我應該使用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