将IPv4和IPv6地址存储在一个列中

use*_*277 10 mysql ipv4 ipv6

我希望能够在我的表中存储IPv4和IPv6地址.无论是IPv4还是IPv6地址,存储用户IP地址的最有效方法是什么?

这将在生产环境中使用,因此未来的证据建议是首选.

San*_*ann 10

我建议以IPv6格式存储每个地址.有一个官方映射:IPv4映射的IPv6地址.它的工作原理如下:

以IPv4地址为例IPv4 192.0.2.44
映射的IPv6地址::ffff:192.0.2.44
也可以写为::ffff:c000:022c(192十进制为c0十六进制等)

您可以使用该inet_pton()函数来解析这些地址,在我的本地系统上,该inet_ntop()函数也以最易读的格式输出它们(::ffff:192.0.2.44).这样,您只需要在应用程序中处理一种格式.

另见这个相关的答案.


kev*_*dez 1

为什么它必须是单列?一些建议...

有 2 列,一列用于 IPv4,一列用于 IPv6。

将 IP 地址存储在单个列中,并有另一列基本上保存一个布尔值,无论该地址是否是 IPv4...

  • 这会浪费资源,因为 ipaddress 并不是那么重要。我的意思是,只有在极少数情况下才会从数据库中检索它。只需要一个版本 (5认同)