mysql 使用inet_aton和inet_ntoa处理ip地址数据的实例

 更新时间:2017年04月05日 11:57:53   投稿:jingxian  
下面小编就为大家带来一篇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) 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实现排名及查询指定用户排名功能(并列排名功能)实例代码

    MYSQL实现排名及查询指定用户排名功能(并列排名功能)实例代码

    这篇文章主要给大家介绍了关于MYSQL实现排名及查询指定用户排名功能(并列排名功能)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-10-10
  • MySql COALESCE函数使用方法代码案例

    MySql COALESCE函数使用方法代码案例

    这篇文章主要介绍了MySql COALESCE函数使用方法代码案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • mysql 的indexof函数用法说明

    mysql 的indexof函数用法说明

    这篇文章主要介绍了mysql 的indexof函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • MySQL数据库中表的操作详解

    MySQL数据库中表的操作详解

    这篇文章主要为大家详细介绍了MySQL数据库中表常用的一些操作方法,文中的示例代码讲解详细, 对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-08-08
  • MySQL视图的概念和操作函数详解

    MySQL视图的概念和操作函数详解

    对MySQL数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理,下面这篇文章主要给大家介绍了关于MySQL数据库基本SQL语句教程之高级操作中视图的相关资料,需要的朋友可以参考下
    2023-03-03
  • Linux下修改MySQL编码的方法

    Linux下修改MySQL编码的方法

    有时候因为编码需要修改mysql的编码,windows下修改有图文界面简单一些,linux大家就可以参考下面的方法
    2012-04-04
  • mysql不包含模糊查询问题

    mysql不包含模糊查询问题

    这篇文章主要介绍了mysql不包含模糊查询问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Mysql查询很慢卡在sending data的原因及解决思路讲解

    Mysql查询很慢卡在sending data的原因及解决思路讲解

    今天小编就为大家分享一篇关于Mysql查询很慢卡在sending data的原因及解决思路讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 新手入门Mysql--概念

    新手入门Mysql--概念

    MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展MySQL是开放源代码的,因此任何人都可以在 GPL的许可下下载并根据个性化的需要对其进行修改
    2021-06-06
  • 分享Mysql命令大全

    分享Mysql命令大全

    本文给大家介绍mysql命令大全相关知识,涉及到mysql命令相关知识,对此感兴趣的朋友一起学习吧
    2015-12-12

最新评论