我该怎么做?
目前,不会使用 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/