问题:
如何使用nHibernate存储128位整数(IPv6)?
特别是在Firebird上,BigInteger MAX大小为2 ^ 64。
我想做以下计算:
SELECT * FROM T_Country_IP_Range
WHERE
(block_from <= @in_IP)
AND (block_to >= @in_ip)
因此不能将它存储为text / varchar / char。
答案 0 :(得分:2)
似乎确实没有针对INT128的火鸟支持。
你可以做的是将128位表示为两个64位字段,一个字段中的高64位(IP_upper
)和另一个字段中的低64位(IP_Lower
)。
所有比较操作都必须比较两个字段。如果上部字段较小/较大或相等,则检查下部字段:
SELECT * FROM T_Country_IP_Range
WHERE
(
block_from_upper < @in_IP_upper
OR
(block_from_upper = @in_IP_upper AND block_from_lower <= @in_IP_lower)
)
AND
(
block_to_upper > @in_IP_upper
OR
(block_to_upper = @in_IP_upper AND block_to_lower >= @in_IP_lower)
)
有点尴尬,毫无疑问