首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql上使用IP和CIDR计算网络和广播地址

如何在mysql上使用IP和CIDR计算网络和广播地址
EN

Stack Overflow用户
提问于 2015-09-15 02:23:40
回答 1查看 1.2K关注 0票数 0

在我的数据库中,地址范围使用IP/CIDR表示法存储在一个列中。此值包含开始和结束IP地址,但需要将它们提取到广播和网络字段中。起始和结束IP地址存储为我所读的帖子的number.One,IP使用MySQL的本机inet_aton()函数转换为IP号,并使用存储地址的inet_ntoa() function.So返回到虚点IP地址,从而提高查询数据库的效率。

根据我使用IP和CIDR的理解,可以计算广播地址。The broadcast address is the network IP, plus,32 minus the CIDR,to the power of 2, minus 1

因此,我运行了下面的SQL更新来填充这两列。

代码语言:javascript
复制
UPDATE blocks SET 
broadcast = (INET_ATON(SUBSTRING_INDEX(network_cidr, '/', 1)) + (POW(2, (32-SUBSTR(network_cidr, INSTR(network_cidr, '/')+1)))-1)), 
network = INET_ATON(SUBSTRING_INDEX(network_cidr, '/', 1));

但这对我没用。我做错什么了吗?

下面是mysql表:

代码语言:javascript
复制
network_cidr    network broadcast
2001:1200::/32  (NULL)  (NULL)
2001:1208::/32  (NULL)  (NULL)
2001:1210:1000::/36 (NULL)  (NULL)
2001:1210:100:8000::/49 (NULL)  (NULL)
2001:1210:100::/49  (NULL)  (NULL)
2001:1210:101::/48  (NULL)  (NULL)
2001:1210:102::/47  (NULL)  (NULL)
2001:1210:104::/46  (NULL)  (NULL)
2001:1210:108::/45  (NULL)  (NULL)
2001:1210:110::/44  (NULL)  (NULL)
2001:1210:120::/43  (NULL)  (NULL)
2001:1210:140::/42  (NULL)  (NULL)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-15 11:04:04

我认为您的问题是您的cidr地址是IPv6地址。不幸的是,根据MySQL文档,INET_ATON只适用于IPv4地址。使用INET6_ATON代替。您可能需要检查您的版本的MySQL支持INET6_ATON。

http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32576733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档