在mysql表中存储IP地址的理想数据类型是什么?

Rob*_* Dc 15 mysql sql

可能重复:
我应该为MySQL存储什么类型的IP地址?

一种数据类型,可同时容纳IPv4和IPv6地址.我想存储IP地址,以限制一个人可以在我的网站上使用他/她的机器制作的配置文件数量.

kni*_*ttl 12

IPv4地址使用32位(4字节),IPv6地址使用128位(16字节).因此,您可以将其二进制表示存储在BINARY(16)VARBINARY(16)字段中.

另请参阅我对mysql数据库中存储的IP地址问题的回答.它还提供注释,为什么你会选择一个而不是另一个.

  • `varbinary(16)` 似乎是最好的选择。`INET6_ATON('172.32.x.x')` 可以将 IPv4 和 IPv6 地址转换为 `blob`。可以使用“INET6_NTOA”将其转换回来。无需在 v4 和 v6 之间处理代码;至少用于存储和检索。 (2认同)
  • 小心,你**不能**可靠地将 ipv4 和 ipv6 地址存储在 BINARY(16) 中 - 当然,你可以*猜测*如果最后 12 个字节为空,那么它*可能*是一个 ipv4 地址,但是有了这个猜测,大约有42亿个ipv6地址会被错误地识别为ipv4!(另一方面,42 亿个 ipv6 地址大约占总 ipv6 空间的 0.00000002%,但这仍然是一个错误,只是一个可能很难命中的错误) (2认同)