我有一个存储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());
ipv4地址一切正常,但我的代码在存储ipv6地址时开始失败。
如何在mysql数据库中存储BigInteger?我在考虑使用VARBINARY。我可以在VARBINARY列上创建索引吗?
与integer上的索引相比,VARBINARY的性能如何?
发布于 2020-03-24 19:18:43
对于IPv4 + IPv6存储,INET6_ATON转换为varbinary(16)。
是的,您可以使用VARBINARY作为索引。它实际上是一个没有字符编码的VARCHAR。它可能比整数慢一点,但是整数不能做同样的事情。您可能不会注意到它,所以不要过早地进行优化。它最多只有16个字符,所以不是很多。
如果您想保留一个文本版本以便于检索,请创建一个generated column,将可变二进制文件转换回来。
https://stackoverflow.com/questions/60829520
复制相似问题