用的是MSSQL数据库,设计数据时IP字段用的是bigint,转换方法跟这个类似:http://www.cnblogs.com/jillzhang/archive/2007/10/24/935621.html
用IP4时没问题,现在的问题是,当用户用的是IPV6时,就会出现转换错误:
Error converting data type varchar to bigint.
请教方案?
IPV6地址需要占用128位16字节,因此肯定不能用bigint(只有64位8字节),建议IPV6字段用binary(16)。
如果使用.net编程,那么使用System.Net.IPAddress,可以方便地在string和byte[]表示方法中切换;
如果你将IPV4和IPv6地址放在同一列中,那么可以使用varbinary(16)。
代码示例:
IPAddress address1 = IPAddress.Parse("3ffe:3201:1401:1:280:c8ff:fe4d:db39");
IPAddress address2 = IPAddress.Parse("192.168.10.123");
byte[] bytes1 = address1.GetAddressBytes();
byte[] bytes2 = address2.GetAddressBytes();
Trace.WriteLine(address1.ToString() == new IPAddress(bytes1).ToString());
Trace.WriteLine(address2.ToString() == new IPAddress(bytes2).ToString())
明白,收到,谢谢!!!
@artwl: http://www.cnblogs.com/jillzhang/archive/2007/10/24/935621.html
这个方法使用bigint储存IPV4的地址也有点不大对劲的,其实只要int就可以了,如果使用int在存储空间和比较上面都会有速度提升的。