我在从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不是。
答案 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数据类型。