基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析

 更新时间:2013年06月13日 16:40:10   作者:  
本篇文章是对Mysql的IP处理函数inet_aton()与inet_ntoa()进行了详细的分析介绍,需要的朋友参考下

有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理。
具体可以查看官方手册

INET_ATON(expr)
给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

mysql> select inet_ntoa(3507806248);
+-----------------------+
| inet_ntoa(3507806248) |
+-----------------------+
| 209.20.224.40         |
+-----------------------+
1 row in set (0.00 sec)

产生的数字总是按照网络字节顺序。如上面,数字按照 209×2563 + 207×2562 + 224×2561 + 40 ×2560 进行计算。我们来验算下:

mysql> select 209*POW(256,3)+207*POW(256,2)+224*POW(256,1)+40*POW(256,0);
+------------------------------------------------------------+
| 209*POW(256,3)+207*POW(256,2)+224*POW(256,1)+40*POW(256,0) |
+------------------------------------------------------------+
|                                                 3520061480 |
+------------------------------------------------------------+
1 row in set (0.02 sec)

INET_ATON() 也能理解短格式 IP 地址:

mysql> select inet_aton('127.0.0.1'),inet_aton('127.1');
+------------------------+--------------------+
| inet_aton('127.0.0.1') | inet_aton('127.1') |
+------------------------+--------------------+
|             2130706433 |         2130706433 |
+------------------------+--------------------+
1 row in set (0.00 sec)

可以理解成为中间2为地址默认为0。

注: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至 2147483647 (即, INET_ATON('127.255.255.255′) 所返回的值)。当然,直接使用bigint更加省事。

INET_NTOA(expr)
给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。也就是inet_aton()的反函数。

mysql> select inet_ntoa(3507806248);
+-----------------------+
| inet_ntoa(3507806248) |
+-----------------------+
| 209.20.224.40         |
+-----------------------+
1 row in set (0.00 sec)

相关文章

  • explain命令为什么可能会修改MySQL数据

    explain命令为什么可能会修改MySQL数据

    这篇文章主要介绍了explain命令为什么可能会修改MySQL数据,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-12-12
  • windows安装MySQL到D盘的超详细步骤

    windows安装MySQL到D盘的超详细步骤

    MySQL数据库作为关系型数据库中的佼佼者,因其体积小,速度快,成本低,不仅受到了市场的极大追捧,也受到了广大程序员的青睐,下面这篇文章主要给大家介绍了关于windows安装MySQL到D盘的超详细步骤,需要的朋友可以参考下
    2023-03-03
  • CentOS系统中MySQL5.1升级至5.5.36

    CentOS系统中MySQL5.1升级至5.5.36

    有相关测试数据说明从5.1到5.5+,MySQL性能会有明显的提升,具体的需要自己建立测试环境去实践下,今天我们就来操作下,并记录下来升级的具体步骤
    2017-07-07
  • MySQL8新特性:持久化全局变量的修改方法

    MySQL8新特性:持久化全局变量的修改方法

    这篇文章主要给大家介绍了关于MySQL 8新特性:持久化全局变量的修改的相关内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Mysql5.6忘记root密码修改root密码的方法

    Mysql5.6忘记root密码修改root密码的方法

    这篇文章主要介绍了Mysql5.6忘记root密码修改root密码的方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • mysql sql常用语句大全

    mysql sql常用语句大全

    这篇文章主要介绍了mysql sql常用语句大全,主要包括操作数据库的命令,修改表的命令及对数据库的操作,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL锁等待与死锁问题分析

    MySQL锁等待与死锁问题分析

    这篇文章主要介绍了MySQL锁等待与死锁问题分析,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • 深入学习MySQL表数据操作

    深入学习MySQL表数据操作

    这篇文章主要介绍了深入学习MySQL表数据操作,基于表操作内容围绕主题展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • MySQL关于ERROR 1290 (HY000)报错解决方法

    MySQL关于ERROR 1290 (HY000)报错解决方法

    在本篇文章里小编给大家整理的是关于MySQL关于ERROR 1290 (HY000)报错的解决方法,有兴趣的朋友们可以参考下。
    2019-09-09
  • 深度解析MySQL 5.7之临时表空间

    深度解析MySQL 5.7之临时表空间

    尽管临时表在实际在线场景中很少会去显式使用,但在某些运维场景还是需要到的,在MySQL5.7中,专门针对临时表做了些优化,下面这篇文章我们来一起深入的解析MySQL 5.7之临时表空间,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12

最新评论