使用PHP在MySQL数据库中存储的IP地址

use*_*828 57 php mysql database ip field

mysql中IP地址的正确字段类型是什么?什么是使用PHP存储它的正确方法?

Fra*_*nes 61

本教程可能对您有所帮助.

保存IPv4地址的最有效方法是使用INT字段(不是您所期望的VARCHAR).你可以使用PHP转换它们ip2long,然后使用MySQL的INET_NTOA函数或PHP long2ip函数.

如果需要存储IPv6,则需要使用BINARY字段和PHP的inet_pton函数.

  • @francois:为什么不简单地使用`inet_pton`?它已经适用于几乎所有ip地址的字符串表示,不需要复杂的转换 (4认同)

kni*_*ttl 51

您可以将它们存储在长度为128位(16字节BINARY(16)或以上VARBINARY(16))的二进制字段中.要将任何IP地址转换为其二进制表示,您可以使用php函数inet_pton.此方法适用于IPv4和IPv6地址.inet_ntop可用于获取存储的ip地址的字符串表示形式(无论版本)

  • `pton` =*presentation*to*network*.`ntop` =*network*to*presentation*. (7认同)
  • @ user552828:是的,你可以将它用于ipv4和ipv6 (2认同)
  • @knittl在这种情况下,似乎不适合使用“ BINARY(16)”。请查看以下链接:/sf/ask/3874307601/,因此应改用VARBINARY(16)。 (2认同)

San*_*der 17

通常,您可以使用VARCHAR(45),因为它足够长,甚至可以存储IPv6.

  • 如果您有隧道地址,IPv6可以是45个字符.虽然这是一个优势,但为什么不能证明未来. (7认同)
  • 那么,对于最多使用16字节的地址,你基本上最多使用45个字节?对我来说似乎很浪费...(使用ipv4地址会变得更糟:4字节地址和15字节字符串repr.) (5认同)
  • 是的,这就是为什么我写了"15字节的ipv4地址"而不是45字节.它仍然使用大约4倍的空间 (3认同)