MYSQL - 选择IP v4 / v6,inet_pton& BIN2HEX

时间:2012-02-10 22:56:50

标签: php mysql select hex ip

我在从mysql sql server中选择正确的值时遇到了一些麻烦。

ip可以是ipv6和v4。

表:用户{

...

ip binary(16)

}

$ip = '192.168.10.115';
$ip = bin2hex(inet_pton($ip)); // Returns c0a80a73
$result = $this->db->select("SELECT * FROM User WHERE HEX(ip) = $ip");
// $result empty because in db its stored as:
// HEX(ip) = C0A80A73000000000000000000000000

如何才能获得* 00000 *的可行匹配?

如果输入是ipv6匹配,则可以,但ip v4不是。

2 个答案:

答案 0 :(得分:1)

<强>更新

MySQL 5.6.3及更高版本支持IPv6地址 - 请参阅以下内容:“INET6_ATON(expr)”

数据类型为VARBINARY(16),而不是BINARY(16),正如之前评论中所建议的那样。唯一的原因是MySQL功能适用于IPv6和IPv4地址。 BINARY(16)适用于仅存储IPv6地址并保存一个字节。处理IPv6和IPv4地址时应使用VARBINARY(16)

答案 1 :(得分:1)

您可以使用VARBINARY代替BINARY吗?

来自Binary/Varbinary上的MySQL手册:

  

如果检索的值必须与为其指定的值相同   没有填充的存储,最好使用VARBINARY或   而是一种BLOB数据类型。