本文将介绍如何在数据库中使用合适格式保存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) unsigned NOT 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) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `ip` int(10) unsigned NOT 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 ip from `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)); // 2886732545
echo 'ip2long(ip_end):'.sprintf('%u',ip2long($ip_end)); // 2886732644
?>
查询:
mysql> select ip,name,inet_ntoa(ip) as ip from `user` where ip>=2886732545 and 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地址数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# mysql
# inet_aton和inet_ntoa
# MySQL存储IP地址的方法
# mysql跨数据库复制表(在同一IP地址中)示例
# 将IP地址转换为整型数字的PHP方法、Asp方法和MsSQL方法、MySQL方法
# 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
# MySql通过ip地址进行访问的方法
# 整型
# 给大家
# 几条
# 数据库中
# 希望能
# 这篇
# 并能
# 可以利用
# 解决方法
# 先用
# 方法来
# 需要注意
# 小编
# 大家多多
# 如何在
# 在某个
# int
# unsigned
# id
# sql
相关文章:
如何使用Golang table-driven基准测试_多组数据测量函数效率
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
历史网站制作软件,华为如何找回被删除的网站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何在云服务器上快速搭建个人网站?
如何挑选优质建站一级代理提升网站排名?
C++时间戳转换成日期时间的步骤和示例代码
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何在Windows虚拟主机上快速搭建网站?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何获取开源自助建站系统免费下载链接?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
如何快速搭建高效香港服务器网站?
如何快速生成橙子建站落地页链接?
如何通过网站建站时间优化SEO与用户体验?
模具网站制作流程,如何找模具客户?
建站之星导航配置指南:自助建站与SEO优化全解析
香港服务器如何优化才能显著提升网站加载速度?
如何快速生成专业多端适配建站电话?
如何在万网自助建站平台快速创建网站?
如何用AWS免费套餐快速搭建高效网站?
建站之星安装后如何自定义网站颜色与字体?
如何获取上海专业网站定制建站电话?
如何选择高效稳定的ISP建站解决方案?
建站之星收费标准详解:套餐费用及年费价格表一览
如何通过cPanel快速搭建网站?
如何在Windows环境下新建FTP站点并设置权限?
如何在建站之星网店版论坛获取技术支持?
如何用VPS主机快速搭建个人网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何制作网站标识牌,动态网站如何制作(教程)?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
建站之星代理如何获取技术支持?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
建设网站制作价格,怎样建立自己的公司网站?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何快速搭建高效WAP手机网站?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
建站之星上传入口如何快速找到?
已有域名和空间如何搭建网站?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
小型网站制作HTML,*游戏网站怎么搭建?
,制作一个手机app网站要多少钱?
网站制作说明怎么写,简述网页设计的流程并说明原因?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
如何通过VPS建站实现广告与增值服务盈利?
*请认真填写需求信息,我们会在24小时内与您取得联系。