将ipv4和ipv6地址转换为整数

阿德里安

我正在尝试将多个IP地址IPv4和IPv6从86.120.51.222转换为1450718174。当前正在尝试构建查询,但对SQL的了解不多

表ip_city_country_location

+----+---------+---------------+-------------+
| ID | ip_from |     ip_to     |    city     |
+----+---------+---------------+-------------+
| 1  | 1.2.3.4 | 1.255.255.255 | city_name_1 |
| 2  | 1.3.4.4 | 1.6.0.0       | city_name_2 |
| 3. | 1.0.0.0 | 1.5.5.5       | city_name_3 |
+----+---------+---------------+-------------+

我在想什么

UPDATE ip_city_country_location SET ip_from = INET_ATON(SELECT ip_from FROm ip_city_country_location), ip_to = INET_ATON(SELECT ip_to FROm ip_city_country_location);

还可以使用CASEWHENAND进行通知THEN,但需要另一个解决方案,该解决方案可以自动转换,因为这是一个500万行的数据库,需要从shell(xampp)运行。喜欢在sql或smth中创建函数。

预期的输出

+----+---------+---------------+-------------+
| ID | ip_from |     ip_to     |    city     |
+----+---------+---------------+-------------+
| 1  | 16909060 | 33554431      | city_name_1 |
| 2  | 16974852 | 17170432      | city_name_2 |
| 3. | 16777216 | 17106181      | city_name_3 |
+----+---------+---------------+-------------+
1000111

您要查找的查询非常简单。

这是查询:

UPDATE ip_city_country_location SET ip_from = INET_ATON(ip_from), ip_to = INET_ATON(ip_to);

注意:

  • 将ip_addresses转换为integervalue后,应将数据类型更改为VARBINARY(16)
  • ip_from和上ip_to建立索引会加快您选择的查询的速度。

编辑:

为了转换IPV6地址,您需要MySQL服务器版本> = 5.6.3

查询如下所示:

UPDATE 
ip_city_country_location 
SET ip_from = IF(IS_IPV6(ip_from),INET6_ATON(ip_from), INET_ATON(ip_from)),         
    ip_to = IF(IS_IPV6(ip_to),INET6_ATON(ip_to), INET_ATON(ip_to));

致谢感谢@Michael的宝贵意见。

您无法在整数列中存储等效的IPv6地址,因为IPv6地址的长度为128位,而MySQL支持的最长整数是BIGINT UNSIGNED,只有64位。INET6_ATON()返回IPv6地址的VARBINARY(16)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将地址从IPv4转换为IPv6

如何将IPV6地址转换为IPV4地址?

Java库,用于将长IPv6地址转换为其压缩形式

即使配置中指定了ipv4地址,kafka也会绑定到ipv6端口

使用PHP preg_replace匿名化IPv4和IPv6地址?

如何使用PHP代码获取IPv4和IPv6地址?

无法启动Jupyter Notebook:“似乎不是IPv4或IPv6地址”

如何将IPv6地址转换为二进制字符串?

以下ipv6地址在ipv4中转换为什么:http:// [0 :: 1]:5001 /

将字符串(不带分隔符)转换为IPV6地址表示形式

如何在Swift中验证IPv4和IPv6地址?

Perl-将IPv4地址转换为十六进制

如何将IPV4地址与IPV6和IPV4一起放入powershell变量中?

通过IPv4询问IPv6地址

如何将二进制IPv6地址转换为十六进制

为什么接口同时显示ipv6地址和ipv4

C#-WinRT-将IPv4地址从uint转换为字符串?

在SQL Server中查询Maxmind GeoLite2 City Blocks csv以获取IPv6和IPv4地址的geoname_id

如何手动将IPv4地址转换为IPv6地址?

Linux netstat显示ipv4映射的ipv6地址

正确的DNS IPv6地址但错误的IPv4地址的Endpoint Communication异常

为什么我同时拥有一个IPv4和IPv6地址?

从IPv4获取IPv6地址?

如何过滤IPv4和IPv6地址?

IPv4和IPv6地址检查器

需要批处理文件以读取主机IPV4和IPV6地址

如何使用AFNetworking将ipv4地址转换为ipv6?

Java:将字符串IPv6地址手动转换为字节数组

在javascript中将大整数/十进制转换为有效的IPv6地址