把我的问题放在透视图上:
我有一个 PHP 应用程序,它将用户的 IP 存储在 MySQL 表中。
列类型为VARBINARY(16)
,应用程序使用 PHPinet_pton
来形成二进制字符串。
也就是说,对于典型的 IP4 地址,字符串有 4 个字节。
如何从表中检索这些 IP,以人类可读的形式显示它们?
我目前的解决方案是:
select INET_NTOA(CONV(HEX(ip),16,10)) from operation_ip;
有没有更直接的方法来做到这一点?
尤其是CONV(HEX(x),16,10)
将 4 个字节更改为整数的最简单方法(实际上我认为它甚至不是整数,而是看起来像整数的字符串)。
(我使用VARBINARY(16)
,因为 PHPinet_pton
可以为 IPv6 地址返回 16 字节。AFAIK MySQLINET_NTOA
不支持 IPv6,但目前这不是我最关心的问题)。