• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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存储IP地址的方法
    • mysql跨数据库复制表(在同一IP地址中)示例
    • 将IP地址转换为整型数字的PHP方法、Asp方法和MsSQL方法、MySQL方法
    • 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
    • MySql通过ip地址进行访问的方法
    上一篇:Linux/Mac MySQL忘记密码命令行修改密码的方法
    下一篇:Windows平台下MySQL安装与配置方法与注意事项
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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