IPv4地址的mySQL长度(INT字段类型)

时间:2014-06-18 12:18:55

标签: php mysql

要在我的Sql中存储IPv4地址,我使用的是INT字段类型。

由于长度是强制性的,那么正确的字段长度是多少?

另外,我使用PHP ip2long来存储访问者的IP地址;为了防止将来出现任何错误,我应该考虑使用IPv6吗?

3 个答案:

答案 0 :(得分:2)

如何存储IPv4已经在StackOverflow(Storing IP address in MySQL database (IPv4 AND IPv6))上得到了解答,所以我只会回答你的其余问题。

  • 只有使用zerofill时,int的长度才有意义:它会用零填充,直到它指定的宽度为止。它也不会削减任何东西。 Int是4个字节,因此它们可以存储 - (2 ^ 31)和2 ^ 31-1之间的任何内容,这是您的长度说明符的重要内容。
  • IPv4和IPv6不是完全可互换的;您的许多用户仍将仅使用IPv4或仅使用IPv6进行连接;没有'转换'。尝试并使您的实现可以存储。请参阅提供的链接。

答案 1 :(得分:2)

这取决于。

如果考虑IPv6兼容性,可以使用PHP inet_pton和inet_ntop来打包这些值。要在MySQL中存储值,您应该使用VARBINARY(16)。

MySQL 5.6.3或更新的纯MySQL解决方案可以使用INET6_ATON和INET6_NTOA来转换值。这两个功能都适用于IPv4和IPv6。

答案 2 :(得分:1)

VARCHAR(15)。你可能不需要ip2long。这取决于你从数据库中取出它时如何使用它,但是从数据库中检索它之后,你可能比以前更好地转换它。 (ip2long用于计算ip范围或在ip地址上使用条件)