mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例
本文将介绍如何在数据库中使用合适格式保存ip地址数据,并能方便的对ip地址进行比较的方法。
1、保存ip地址到数据库
数据库中保存ip地址,字段一般会定义为:
`ip`char(15)NOTNULL,
因为ip地址(255.255.255.255)的最大长度是15,使用15位char已足够。
创建表user
CREATETABLE`user`( `id`int(11)unsignedNOTNULLAUTO_INCREMENT, `name`varchar(30)NOTNULL, `ip`char(15)NOTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDB;
插入几条数据
INSERTINTO`user`(`id`,`name`,`ip`)VALUES (2,'Abby','192.168.1.1'), (3,'Daisy','172.16.11.66'), (4,'Christine','220.117.131.12');
2、mysqlinet_aton与inet_ntoa方法
mysql提供了两个方法来处理ip地址
inet_aton把ip转为无符号整型(4-8位)
inet_ntoa把整型的ip转为电地址
插入数据前,先用inet_aton把ip地址转为整型,可以节省空间,因为char(15)占16字节。
显示数据时,使用inet_ntoa把整型的ip地址转为电地址显示即可。
例子:
CREATETABLE`user`( `id`int(11)unsignedNOTNULLAUTO_INCREMENT, `name`varchar(100)NOTNULL, `ip`int(10)unsignedNOTNULL, PRIMARYKEY(`id`) )ENGINE=InnoDB;
插入几条数据
INSERTINTO`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>selectid,name,inet_ntoa(ip)asipfrom`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地址转为整型,再进行比较。
查询:
mysql>selectip,name,inet_ntoa(ip)asipfrom`user`whereip>=2886732545andip<=2886732644; +------------+-------+---------------+ |ip|name|ip| +------------+-------+---------------+ |2886732610|Daisy|172.16.11.66| +------------+-------+---------------+
注意:使用ip2long方法把ip地址转为整型时,对于大的ip会出现负数,出现原因及处理方法可以参考我另一篇文章:《详谈phpip2long出现负数的原因及解决方法》
4、总结
1、保存ip地址到数据库,使用unsignedint格式,插入时使用inet_aton方法把ip先转为无符号整型,可以节省存储空间。
2、显示时使用inet_ntoa把整型ip地址转为电地址。
3、phpip2long转ip为整型时,需要注意出现负数。
以上这篇mysql使用inet_aton和inet_ntoa处理ip地址数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。