关于MySQL存储IP地址引发的思考

本文介绍如何使用MySQL的INET_ATON()和INET_NTOA()函数将IP地址转换为无符号整数,以及反之。这种方法不仅节省存储空间,还便于进行地址段筛选。文章详细解释了转换原理,并通过实例演示了具体操作。

产生思考        

今天在看《高性能MySQL》时,有这么一句话,IP地址实际上是32位无符号整数,所以应该用无符号整数存储IP地址,MySQL提供了INET_ATON()和INET_NTOA()函数在这两种表示方法之间的转换。这样存的好处有两点:

用法如下

  • INET_ATON(192.168.1.1) = 3232235777 
  • INET_NTOA(3232235777 ) = 192.168.1.1

转换原理

那么有没有考虑过是如何实现转换的呢?其实很简单,我们上边说了,IP地址每个地址段的范围为0~255,也就是0~2的8次方-1,所以说每个地址段占8位1个字节的大小。所以IP转整型,就是从高地址段到低地址段进行计算,公式如下:

     第一段*256的3次方 + 第二段*256的2次方+第三段*256+第四段*1

=  192*256*256*256 + 168*256*256 + 1*256 + 1*1

=  3221225472 + 11010048 + 256 + 1

=  3232235777 

MySQL验证结果

mysql> select INET_ATON('192.168.1.1');
+--------------------------+
| INET_ATON('192.168.1.1') |
+--------------------------+
|               3232235777 |
+--------------------------+
1 row in set (0.00 sec)

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

mysql>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AirGo.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值