mysql inet_aton 原理_mysql 使用inet_aton和inet_ntoa处理ip地址

本文将介绍如何在数据库中使用合适格式保存ip地址数据,并能方便的对ip地址进行比较的方法。

1、保存ip地址到数据库

数据库中保存ip地址,字段一般会定义为:

`ip` char(15) NOT NULL,

因为ip地址(255.255.255.255)的最大长度是15,使用15位char已足够。

创建表user

?CREATE TABLE `user` (`id`int(11) unsignedNOT NULL AUTO_INCREMENT,`name`varchar(30)NOT NULL,`ip`char(15)NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB;

插入几条数据

?INSERT INTO `user` (`id`, `name`, `ip`)VALUES(2,'Abby','192.168.1.1'),(3,'Daisy','172.16.11.66'),(4,'Christine','220.117.131.12');

2、mysql inet_aton 与 inet_ntoa 方法

mysql提供了两个方法来处理ip地址

inet_aton把ip转为无符号整型(4-8位)

inet_ntoa把整型的ip转为电地址

插入数据前,先用inet_aton把ip地址转为整型,可以节省空间,因为char(15) 占16字节。

显示数据时,使用inet_ntoa把整型的ip地址转为电地址显示即可。

例子:

?CREATE TABLE `user` (`id`int(11) unsignedNOT NULL AUTO_INCREMENT,`name`varchar(100)NOT NULL,`ip`int(10) unsignedNOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB;

插入几条数据

?INSERT INTO `user` (`id`, `name`, `ip`)VALUES(2,'Abby', inet_aton('192.168.1.1')),(3,'Daisy', inet_aton('172.16.11.66')),(4,'Christine', inet_aton('220.117.131.12')); mysql>select *from `user`;+----+-----------+------------+| id |name  | ip   |+----+-----------+------------+| 2 | Abby  | 3232235777 || 3 | Daisy  | 2886732610 || 4 | Christine | 3698688780 |+----+-----------+------------+

查询显示为电地址

?mysql>select id,name,inet_ntoa(ip)as ipfrom `user`;+----+-----------+----------------+| id |name  | ip    |+----+-----------+----------------+| 2 | Abby  | 192.168.1.1 || 3 | Daisy  | 172.16.11.66 || 4 | Christine | 220.117.131.12 |+----+-----------+----------------+

3、比较方法

如果需要找出在某个网段的用户(例如:172.16.11.1 ~ 172.16.11.100),可以利用php的ip2long方法,把ip地址转为整型,再进行比较。

?<?php $ip_start ='172.16.11.1';$ip_end ='172.16.11.100'; echo'ip2long(ip_start):'.sprintf('%u',ip2long($ip_start)); // 2886732545echo'ip2long(ip_end):'.sprintf('%u',ip2long($ip_end));  // 2886732644?>

查询:

?mysql>select ip,name,inet_ntoa(ip)as ipfrom `user`where ip>=2886732545and ip<=2886732644;+------------+-------+---------------+| ip   |name | ip   |+------------+-------+---------------+| 2886732610 | Daisy | 172.16.11.66 |+------------+-------+---------------+

注意:使用ip2long方法把ip地址转为整型时,对于大的ip会出现负数,出现原因及处理方法可以参考我另一篇文章:《详谈php ip2long 出现负数的原因及解决方法》

4、总结

1、保存ip地址到数据库,使用unsigned int格式,插入时使用inet_aton方法把ip先转为无符号整型,可以节省存储空间。

2、显示时使用inet_ntoa把整型ip地址转为电地址。

3、php ip2long转ip为整型时,需要注意出现负数。

以上这篇mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值