Mysql 存储IP 为INT碰到的问题

PHP 林涛 3385℃ 0评论

很多程序员都会创建一个 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碰到的问题

喜欢 (0)
发表我的评论
取消评论

表情