很多程序员都会创建一个 VARCHAR(15) 字段来存放字符串形式的IP而不是整形的IP。
如果你用整形来存放,只需要4个字节,并且你可以有定长的字段。而且,这会为你带来查询上的优势,尤其是当你需要使用这样的WHERE条件:IP between ip1 and ip2。
我们必需要使用UNSIGNED INT,因为 IP地址会使用整个32位的无符号整形。
而你的查询,你可以使用 INET_ATON() 来把一个字符串IP转成一个整形,并使用 INET_NTOA() 把一个整形转成一个字符串IP。在PHP中,也有这样的函数 ip2long() 和 long2ip()。
但是我碰到了一个问题:
SELECT INET_NTOA( 1928694779 ) ;
在服务器1上出现错误
NET_NTOA( 1928694779 )
3131342e3234352e3133392e323531
在服务器2上显示正确:
INET_NTOA(1928694779)
114.245.139.251
两个服务器都是Centos,搞不懂为什么不同;
解决 办法:用PHP中的 long2ip、ip2long 就可以解决,其实: INET_NTOA=long2ip INET_ATON=ip2long
如需转载请注明: 转载自26点的博客
本文链接地址: Mysql 存储IP 为INT碰到的问题
转载请注明:26点的博客 » Mysql 存储IP 为INT碰到的问题