把我的问题放在正确的角度:
我有一个PHP应用程序,它将用户的IP存储在MySQL表中。
列类型是VARBINARY(16),应用程序使用PHP的inet_pton来形成二进制字符串。
对于一个典型的IP4地址,这个字符串有4个字节。
如何从表中检索这些ip,并以可读的形式显示它们?
我目前的解决方案是:

select INET_NTOA(CONV(HEX(ip),16,10)) from operation_ip;

有更直接的方法吗?
尤其是CONV(HEX(x),16,10)将4字节更改为整数的最简单方法(实际上我认为它甚至不是整数,而是一个看起来像整数的字符串)。
(我使用VARBINARY(16),因为PHP的inet_pton可以为IPv6地址返回16字节。AFAIK MySQL的INET_NTOA不支持IPv6,但目前这不是我最担心的问题)。

最佳答案

MySQL有很好的内置函数来处理这种情况:

INSERT INTO t(ip) VALUE (INET_ATON('1.2.3.4')); -- stores integer 16909060
SELECT INET_NTOA(ip) FROM t; -- returns string '1.2.3.4'

或者PHP方式:
$sql = 'INSERT INTO t(ip) VALUE (' . ip2long('1.2.3.4') . '))';
// ip2long('1.2.3.4') = 16909060
// reverse conversion: long2ip(16909060) returns '1.2.3.4'

关于php - 如何在mysql中将二进制转换为整数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17464220/

10-16 14:45