如何在mysql中将二进制转换为整数?

时间:2013-07-04 07:26:15

标签: php mysql ip-address

提出我的问题:

我有一个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,但目前这不是我最关心的问题)。

1 个答案:

答案 0 :(得分:0)

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'