【发布时间】:2014-06-18 12:18:55
【问题描述】:
为了在我的 Sql 中存储 IPv4 地址,我使用的是 INT 字段类型。
既然长度是强制性的,那么正确的字段长度是多少?
另外,我使用 PHP ip2long 来存储访问者的 IP 地址;所以为了防止将来出现任何错误,我应该考虑使用 IPv6 吗?
【问题讨论】:
为了在我的 Sql 中存储 IPv4 地址,我使用的是 INT 字段类型。
既然长度是强制性的,那么正确的字段长度是多少?
另外,我使用 PHP ip2long 来存储访问者的 IP 地址;所以为了防止将来出现任何错误,我应该考虑使用 IPv6 吗?
【问题讨论】:
StackOverflow (Storing IP address in MySQL database (IPv4 AND IPv6)) 上已经回答了如何存储 IPv4,所以我只回答您的其余问题。
【讨论】:
这取决于。
如果您考虑 IPv6 兼容性,您可以在 PHP 中使用 inet_pton 和 inet_ntop 来打包这些值。要将值存储在 MySQL 中,您应该使用 VARBINARY(16)。
MySQL 5.6.3 或更新版本 的纯 MySQL 解决方案可以使用 INET6_ATON 和 INET6_NTOA 来转换值。这两个函数都适用于 IPv4 和 IPv6。
【讨论】:
VARCHAR(15)。您可能不需要 ip2long。这取决于您将它从数据库中取回时将如何使用它,但是从数据库中检索它之后转换它可能比以前更好。 (ip2long 用于计算 ip 范围或对 ip 地址使用条件)
【讨论】: