如何在mysql数据库中使用整型ipv6?
我有一个存储ip地址的表。为了更快地访问,我还存储了ip int。这是表结构如何在mysql数据库中使用整型ipv6?,mysql,mariadb,ipv6,ipv4,Mysql,Mariadb,Ipv6,Ipv4,我有一个存储ip地址的表。为了更快地访问,我还存储了ip int。这是表结构 CREATE TABLE `ipv6_test` ( `ip_string` varchar(20) DEFAULT NULL, `ip_int` double DEFAULT null ) ; 我使用了以下方法来获得ip地址的整数版本 new BigInteger(1, com.google.common.net.InetAddresses.forString(ip).getAddress()); 对于i
CREATE TABLE `ipv6_test` (
`ip_string` varchar(20) DEFAULT NULL,
`ip_int` double DEFAULT null
) ;
我使用了以下方法来获得ip地址的整数版本
new BigInteger(1, com.google.common.net.InetAddresses.forString(ip).getAddress());
对于ipv4地址,一切正常,但我的代码在存储ipv6地址时开始失败
如何在mysql数据库中存储BigInteger?
我正在考虑使用VARBINARY。我可以在VARBINARY列上创建索引吗
与整数索引相比,VARBINARY的性能如何?将IPv4+IPv6存储转换为VARBINARY(16)
是的,您可以使用VARBINARY作为索引。它实际上是一个没有字符编码的VARCHAR。它可能比整数慢一点,但整数不能做同样的工作。你可能不会注意到,所以不要过早地优化。它最多只有16个字符,所以不多
如果要保留文本版本以便于检索,请创建一个将varbinary转换回的文件。将其转换为用于IPv4+IPv6存储的varbinary(16)
是的,您可以使用VARBINARY作为索引。它实际上是一个没有字符编码的VARCHAR。它可能比整数慢一点,但整数不能做同样的工作。你可能不会注意到,所以不要过早地优化。它最多只有16个字符,所以不多
如果您想保留一个文本版本以便于检索,请创建一个将varbinary转换回的方法。为什么
ip\u int
是双精度的?即使不注意它是近似值——无论如何它都不能接收128位数据。为什么ip\u int
是双精度的?即使不注意它是近似值,但无论如何它都不能接收128位的数据。