php - 如何将 IPv6 从二进制转换为 MySQL 中的存储

标签 php mysql ipv6

我正在尝试以一种有效的方式在 MySQL 5.0 中存储 IPv6 地址。我已经阅读了与此相关的其他问题,such as this one .该问题的作者最终选择了两个 BIGINT 字段。我的搜索还发现了另一种常用的机制:使用 DECIMAL(39,0) 来存储 IPv6 地址。我有两个问题。

  1. 与 2*BIGINT 等其他方法相比,使用 DECIMAL(39,0) 有哪些优点和缺点?
  2. 如何从 inet_pton() 返回的二进制格式转换(用 PHP)转换为 MySQL 可用的十进制字符串格式,以及如何转换回来以便我可以使用 inet_ntop() 进行 pretty-print ?

最佳答案

我们改为使用 VARBINARY(16) 列并使用 inet_pton()inet_ntop()进行转换:

https://github.com/skion/mysql-udf-ipv6

这些函数可以加载到正在运行的 MySQL 服务器中,并会在 SQL 中为您提供 INET6_NTOPINET6_PTON,就像熟悉的 INET_NTOA 和IPv4 的 INET_ATON 函数。

编辑:现在 MySQL 中有兼容的函数,只有 different names .仅当您使用的是 5.6 之前的 MySQL 并且正在寻找方便的 future 升级路径时才使用上述方法。

关于php - 如何将 IPv6 从二进制转换为 MySQL 中的存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120371/

相关文章:

php - mysql SUM 列

python - Python 中 socket.getfqdn 的 IPv6 替代品是什么?

python - 异常 IP6 没有属性

php - 拉拉维尔 : How do I get records from pivot table whereby its foreign key does not reference a primary key?

php - 如何从 PHP 数组中获取独特且最受欢迎的值

php - 输入表单的问题

php - 如何修复 CI 事件记录中的此查询?

mysql - 根据复选框过滤 mysql 结果

java - 在 Java 程序中启用/禁用 IPv6 Windows 设置

javascript - 将 php 变量传递给 javascript 参数