《Mysql應用mysql 使用inet_aton和inet_ntoa處理ip地址數據的實例》要點:
本文介紹了Mysql應用mysql 使用inet_aton和inet_ntoa處理ip地址數據的實例,希望對您有用。如果有疑問,可以聯系我們。
MYSQL入門本文將介紹如安在數據庫中使用合適格式保存ip地址數據,并能方便的對ip地址進行比較的方法.
MYSQL入門1、保留ip地址到數據庫
MYSQL入門數據庫中保留ip地址,字段一般會定義為:
MYSQL入門`ip` char(15) NOT NULL,
MYSQL入門因為ip地址(255.255.255.255)的最大長度是15,使用15位char已足夠.
MYSQL入門創建表user
MYSQL入門
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;
MYSQL入門插入幾條數據
MYSQL入門
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');
MYSQL入門2、mysql inet_aton 與 inet_ntoa 辦法
MYSQL入門mysql提供了兩個辦法來處理ip地址
MYSQL入門inet_aton 把ip轉為無符號整型(4-8位)
MYSQL入門inet_ntoa 把整型的ip轉為電地址
MYSQL入門插入數據前,先用inet_aton把ip地址轉為整型,可以節省空間,因為char(15) 占16字節.
MYSQL入門顯示數據時,使用inet_ntoa把整型的ip地址轉為電地址顯示即可.
MYSQL入門例子:
MYSQL入門
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;
MYSQL入門插入幾條數據
MYSQL入門
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入門查詢顯示為電地址
MYSQL入門
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 |
+----+-----------+----------------+
MYSQL入門3、比較辦法
MYSQL入門如果需要找出在某個網段的用戶(例如:172.16.11.1 ~ 172.16.11.100),可以利用php的ip2long辦法,把ip地址轉為整型,再進行比較.
MYSQL入門
<?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入門查詢:
MYSQL入門
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 |
+------------+-------+---------------+
MYSQL入門注意:使用ip2long辦法把ip地址轉為整型時,對于大的ip會出現負數,出現原因及處理辦法可以參考我另一篇文章:《詳談php ip2long 出現負數的原因及解決辦法》
MYSQL入門4、總結
MYSQL入門1、保存ip地址到數據庫,使用unsigned int格式,插入時使用inet_aton辦法把ip先轉為無符號整型,可以節省存儲空間.
MYSQL入門2、顯示時使用inet_ntoa把整型ip地址轉為電地址.
MYSQL入門3、php ip2long轉ip為整型時,必要注意出現負數.
MYSQL入門以上這篇mysql 使用inet_aton和inet_ntoa處理ip地址數據的實例便是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持維易PHP.
《Mysql應用mysql 使用inet_aton和inet_ntoa處理ip地址數據的實例》是否對您有啟發,歡迎查看更多與《Mysql應用mysql 使用inet_aton和inet_ntoa處理ip地址數據的實例》相關教程,學精學透。維易PHP學院為您提供精彩教程。