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

时间:2014-03-25 14:02:36

标签: mysql ipv6 ipv4

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

这将在生产环境中使用,因此首选未来证明建议。

2 个答案:

答案 0 :(得分:9)

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

以IPv4地址192.0.2.44为例 IPv4映射的IPv6地址为::ffff:192.0.2.44
其中也可以写成::ffff:c000:022c192十进制为c0十六进制等等)

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

另见this related answer

答案 1 :(得分:1)

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

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

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