利用mysql的inet_aton()和inet_ntoa()函數儲存IP地址的方法分享

來源:互聯網
上載者:User

標籤:

當前很多應用都適用字串char(15)來儲存IP地址(佔用16個位元組),利用inet_aton()和inet_ntoa()函數,來儲存IP地址效率很高,適用unsigned int 就可以滿足需求,不需要使用bigint,只需要4個位元組,節省儲存空間,同時效率也高很多

 

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)

利用mysql的inet_aton()和inet_ntoa()函數儲存IP地址的方法分享

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.