没想到啊

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  6 随笔 :: 379 文章 :: 97 评论 :: 24万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

mysql> create table jackbillow (ip int unsigned, name char(1));
Query OK, 0 rows affected (0.02 sec)

 

mysql> insert into jackbillow values(inet_aton('192.168.1.200'), 'A'), (inet_aton('200.100.30.241'), 'B');                         
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

 

mysql> insert into jackbillow values(inet_aton('24.89.35.27'), 'C'), (inet_aton('100.200.30.22'), 'D');                            
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from jackbillow;
+------------+------+
| ip         | name |
+------------+------+
| 3232235976 | A    |
| 3362004721 | B    |
|  408494875 | C    |
| 1690836502 | D    |
+------------+------+
4 rows in set (0.00 sec)

 

mysql> select * from jackbillow where ip = inet_aton('192.168.1.200');
+------------+------+
| ip         | name |
+------------+------+
| 3232235976 | A    |
+------------+------+
1 row in set (0.00 sec)

 

mysql> select inet_ntoa(ip) from jackbillow;
+----------------+
| inet_ntoa(ip)  |
+----------------+
| 192.168.1.200  |
| 200.100.30.241 |
| 24.89.35.27    |
| 100.200.30.22  |
+----------------+
4 rows in set (0.00 sec)

 

 当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_ntoa()函数,来存储IP地址效率很高,适用unsigned int 就可以满足需求,不需要使用bigint,只需要4个字节,节省存储空间,同时效率也高很多。

如果IP列有索引,可以使用下面方式查询:

mysql> select inet_aton('100.200.30.22');                            
+----------------------------+
| inet_aton('100.200.30.22') |
+----------------------------+
|                 1690836502 |
+----------------------------+
1 row in set (0.00 sec)

 

mysql> select * from jackbillow where ip=1690836502;
+------------+------+
| ip         | name |
+------------+------+
| 1690836502 | D    |
+------------+------+
1 row in set (0.00 sec)

mysql> select inet_ntoa(ip),name from jackbillow where ip=1690836502;  
+---------------+------+
| inet_ntoa(ip) | name |
+---------------+------+
| 100.200.30.22 | D    |
+---------------+------+
1 row in set (0.00 sec)

 

对于LIKE操作,可以使用下面方式:

mysql> select inet_ntoa(ip) from jackbillow; 
+----------------+
| inet_ntoa(ip)  |
+----------------+
| 192.168.1.200  |
| 200.100.30.241 |
| 24.89.35.27    |
| 100.200.30.22  |
| 192.168.1.100  |
| 192.168.1.20   |
| 192.168.2.20   |
+----------------+
7 rows in set (0.00 sec)

 

mysql> select inet_aton('192.168.1.0');
+--------------------------+
| inet_aton('192.168.1.0') |
+--------------------------+
|               3232235776 |
+--------------------------+
1 row in set (0.00 sec)

mysql> select inet_aton('192.168.1.255');                
+----------------------------+
| inet_aton('192.168.1.255') |
+----------------------------+
|                 3232236031 |
+----------------------------+
1 row in set (0.00 sec)

 

mysql> select inet_ntoa(ip) from jackbillow where ip between 3232235776 and 3232236031;                          
+---------------+
| inet_ntoa(ip) |
+---------------+
| 192.168.1.200 |
| 192.168.1.100 |
| 192.168.1.20  |
+---------------+
3 rows in set (0.00 sec)

 

mysql> select inet_ntoa(ip) from jackbillow where ip between inet_aton('192.168.1.0') and inet_aton('192.168.1.255'); 
+---------------+
| inet_ntoa(ip) |
+---------------+
| 192.168.1.200 |
| 192.168.1.100 |
| 192.168.1.20  |
+---------------+
3 rows in set (0.00 sec)

 

http://www.cnblogs.com/ylqmf/archive/2012/03/14/2396589.html

posted on   没想到啊  阅读(231)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示