【问题标题】:mySQL Length for a IPv4 Address (INT Field Type)IPv4 地址的 mySQL 长度(INT 字段类型)
【发布时间】:2014-06-18 12:18:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

    • 整数的长度仅在您使用 zerofill 时才相关:它将用零填充,直到达到您指定的宽度。它也不会切断任何东西。整数是 4 个字节,因此它们可以存储 -(2^31) 和 2^31-1 之间的任何内容,无论您的长度说明符如何。
    • IPv4 和 IPv6 不能完全互换;您的许多用户仍将仅使用 IPv4 或仅使用 IPv6 进行连接;没有“转换”。尝试使您的实现可以存储两者。请参阅提供的链接。

    【讨论】:

      【解决方案2】:

      这取决于。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多