正如“ipv6-capable inet_aton and inet_ntoa functions needed”中所要求的,目前没有用于存储 IPv6 地址的 MySQL 函数。存储/插入的推荐数据类型/功能是什么? (我不打算将它们存储为字符串)。我也不想将 IPv6 地址分成 2 个 INT。
最佳答案
怎么样:
BINARY(16)
这应该足够有效。
目前没有在 MySQL 服务器中将文本 IPv6 地址从/转换为二进制的功能,如该错误报告中所述。您需要在您的应用程序中执行此操作,或者可能在 MySQL 服务器中创建一个 UDF(用户定义函数)来执行此操作。
更新:
MySQL 5.6.3 支持 IPv6 地址,请参阅以下内容:“INET6_ATON(expr)”。
数据类型是 VARBINARY(16)
而不是我之前建议的 BINARY(16)
。唯一的原因是 MySQL 函数适用于 IPv6 和 IPv4 地址。 BINARY(16)
适用于仅存储 IPv6 地址并节省一个字节。处理 IPv6 和 IPv4 地址时应使用 VARBINARY(16)
。
旧版本 MySQL 和 MariaDB 的实现,请参见以下内容:“EXTENDING MYSQL 5 WITH IPV6 FUNCTIONS”。
https://stackoverflow.com/questions/6964143/