我正在尝试以一种有效的方式在 MySQL 5.0 中存储 IPv6 地址。我已经阅读了与此相关的其他问题,such as this one .该问题的作者最终选择了两个 BIGINT 字段。我的搜索还发现了另一种常用的机制:使用 DECIMAL(39,0) 来存储 IPv6 地址。我有两个问题。
- 与 2*BIGINT 等其他方法相比,使用 DECIMAL(39,0) 有哪些优点和缺点?
- 如何从 inet_pton() 返回的二进制格式转换(用 PHP)转换为 MySQL 可用的十进制字符串格式,以及如何转换回来以便我可以使用 inet_ntop() 进行 pretty-print ?
最佳答案
我们改为使用 VARBINARY(16)
列并使用 inet_pton()
和 inet_ntop()
进行转换:
https://github.com/skion/mysql-udf-ipv6
这些函数可以加载到正在运行的 MySQL 服务器中,并会在 SQL 中为您提供 INET6_NTOP
和 INET6_PTON
,就像熟悉的 INET_NTOA
和IPv4 的 INET_ATON
函数。
编辑:现在 MySQL 中有兼容的函数,只有 different names .仅当您使用的是 5.6 之前的 MySQL 并且正在寻找方便的 future 升级路径时才使用上述方法。
关于php - 如何将 IPv6 从二进制转换为 MySQL 中的存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120371/