如何在mysql数据库中使用ipv6整数?

问题描述 投票:0回答:1

我有一个表,用于存储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地址时我的代码开始失败。

如何将BigInteger存储在mysql数据库中?我正在考虑使用VARBINARY。我可以在VARBINARY列上创建索引吗?

与二进制索引相比,VARBINARY的性能如何?

mysql mariadb ipv6 ipv4
1个回答
1
投票

[INET6_ATON转换为用于IPv4 + IPv6存储的varbinary(16)。

是的,您可以将VARBINARY用作索引。它实际上是一个无字符编码的VARCHAR。它可能比整数慢一点,但int不能完成相同的工作。您可能不会注意到它,所以不要过早优化。它最多只能输入16个字符,因此数量不多。

如果要保留文本版本以便于检索,请创建generated column将varbinary转换回。

© www.soinside.com 2019 - 2024. All rights reserved.