mysql ip long_Mysql 存储IP 为INT碰到的问题

很多程序员都会创建一个 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值