mysql - 如何在关系数据库中存储与 IPv6 兼容的地址

标签 mysql ipv6

我该怎么做?

目前,不会使用 IPv6,但我需要设计应用程序以使其支持 IPv6。有必要在 MySQL 数据库中存储 IP 地址和 CIDR block (也是 BGP NLRI,但这是另一回事)。我一直使用 INT 表示 IPv4 + TINYINT 表示 masklen,但 IPv6 是 128 位的。

哪种方法最适合? 2xBIGINT? CHAR(16) 用于二进制存储? CHAR(39) 用于文本存储? 8xSMALLINT 在专用表中?

你会推荐什么?

最佳答案

我不确定哪个是 MySQL 的正确答案,因为它本身还不支持 IPv6 地址格式(尽管“WL#798: MySQL IPv6 support”表明它将在MySQL v6.0,当前文档不支持)。

但是,在您提出的建议中,我建议使用 2 * BIGINT,但请确保它们是未签名的。在 IPv6 的/64 地址边界处有一种自然分割(因为/64 是最小的网络 block 大小),这将很好地对齐。

关于mysql - 如何在关系数据库中存储与 IPv6 兼容的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/420680/

相关文章:

php - 在 SQL 查询中使用 PHP 来确定查询的下一部分应该如何进行

c# - 使用 MySqlDataReader 无法正确查询

php - 重构基于 PHP 的 IP 过滤器以与 IPv6 配合使用

shell - 用于将 IPv6 地址转换为数字(或字符串)的大型 CSV 文件的脚本

ipv6 - 如何将互联网地址 6 转换为互联网地址 4?

android - 用于在 Android 应用程序中配置静态 IP 地址的 API

php - 连接到远程服务器并执行简单的数据库查询时出现问题

python - 检查时间戳是否在两列之间

php - 如何使用laravel和mysql查看基于日期范围的数据

c - 我应该在与 IPv4 不同的端口上监听 IPv6 连接吗?