我有一个表,用于存储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的性能如何?
[INET6_ATON转换为用于IPv4 + IPv6存储的varbinary(16)。
是的,您可以将VARBINARY用作索引。它实际上是一个无字符编码的VARCHAR。它可能比整数慢一点,但int不能完成相同的工作。您可能不会注意到它,所以不要过早优化。它最多只能输入16个字符,因此数量不多。
如果要保留文本版本以便于检索,请创建generated column将varbinary转换回。