我希望能够在我的表中存储IPv4和IPv6地址。无论用户使用的是IPv4还是IPv6地址,最有效的存储IP地址的方法是什么?
由于这将用于生产环境,所以建议考虑未来的需求。
我建议将每个地址都以IPv6格式存储。这方面有官方的映射: IPv4-mapped IPv6地址。它的工作方式如下:
例如,取IPv4地址192.0.2.44
对应的IPv4-mapped IPv6地址为::ffff:192.0.2.44
也可以写作::ffff:c000:022c
(192
十进制表示为c0
十六进制,等等)
您可以使用inet_pton()
函数解析此类地址,在我的本地系统上,inet_ntop()
函数还以最可读的格式输出它们(::ffff:192.0.2.44
)。这样,您的应用程序只需要处理一种格式。
还请参见此相关答案。
BINARY(16)
,是否可以将IP地址直接存储,例如192.168.1.2,还是需要执行某些转换? - user2650277