我正在尝试将 GeoLite2 ip 导入国家 csv 文件到我的 MySQL 数据库。我成功地做到了,但是,要使用它在我的查询中搜索 IP,我需要在 ipv4 和 ipv6 表中再创建两个字段,以存储给定的每个 CIDR 范围的 start_ip 和 end_ip 值(GeoLite csv 文件仅指定 CIDR 格式的范围)。
我能够使用此处给出的解决方案将其正确转换为 ipv4 地址范围 Importing MaxMind's GeoLite2 to MySQL
所以我用
INET_ATON(SUBSTRING(network, 1, LOCATE('/', network) - 1))
对于 start_ip 和
INET_ATON(SUBSTRING(network, 1, LOCATE('/', network) - 1)) + (POW(2, (32-CONVERT(SUBSTRING(network, LOCATE('/', network) + 1), UNSIGNED INT)))-1)
对于 end_ip。network 是存储 CIDR 范围的字段的名称。
但是,这不适用于 CIDR 格式的 IPv6 地址范围。我尝试使用 INET6_ATON 而不是 INET_ATON 但它给了我一个数值超出范围的错误。我对 IPv6 地址了解不多,所以自己找到一个公式并不容易。
任何帮助表示赞赏。