主頁 > 知識庫 > mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實例

mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實例

熱門標(biāo)簽:電銷機器人公眾號推送 南宋地圖標(biāo)注黃河華山 地圖標(biāo)注培訓(xùn) 電銷機器人說明書 智能電銷機器人靠譜么 安國在哪里辦理400電話 手機用地圖標(biāo)注工具 昆明智能外呼系統(tǒng)中心 長安區(qū)違法建房地圖標(biāo)注

本文將介紹如何在數(shù)據(jù)庫中使用合適格式保存ip地址數(shù)據(jù),并能方便的對ip地址進行比較的方法。

1、保存ip地址到數(shù)據(jù)庫

數(shù)據(jù)庫中保存ip地址,字段一般會定義為:

`ip` char(15) NOT NULL,

因為ip地址(255.255.255.255)的最大長度是15,使用15位char已足夠。

創(chuàng)建表user

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;

插入幾條數(shù)據(jù)

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');

2、mysql inet_aton 與 inet_ntoa 方法

mysql提供了兩個方法來處理ip地址

inet_aton 把ip轉(zhuǎn)為無符號整型(4-8位)

inet_ntoa 把整型的ip轉(zhuǎn)為電地址

插入數(shù)據(jù)前,先用inet_aton把ip地址轉(zhuǎn)為整型,可以節(jié)省空間,因為char(15) 占16字節(jié)。

顯示數(shù)據(jù)時,使用inet_ntoa把整型的ip地址轉(zhuǎn)為電地址顯示即可。

例子:

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;

插入幾條數(shù)據(jù)

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> 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 |
+----+-----------+----------------+

3、比較方法

如果需要找出在某個網(wǎng)段的用戶(例如:172.16.11.1 ~ 172.16.11.100),可以利用php的ip2long方法,把ip地址轉(zhuǎn)為整型,再進行比較。

?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> 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 |
+------------+-------+---------------+

注意:使用ip2long方法把ip地址轉(zhuǎn)為整型時,對于大的ip會出現(xiàn)負數(shù),出現(xiàn)原因及處理方法可以參考我另一篇文章:《詳談php ip2long 出現(xiàn)負數(shù)的原因及解決方法

4、總結(jié)

1、保存ip地址到數(shù)據(jù)庫,使用unsigned int格式,插入時使用inet_aton方法把ip先轉(zhuǎn)為無符號整型,可以節(jié)省存儲空間。

2、顯示時使用inet_ntoa把整型ip地址轉(zhuǎn)為電地址。

3、php ip2long轉(zhuǎn)ip為整型時,需要注意出現(xiàn)負數(shù)。

以上這篇mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • MySQL存儲IP地址的方法
  • mysql跨數(shù)據(jù)庫復(fù)制表(在同一IP地址中)示例
  • 將IP地址轉(zhuǎn)換為整型數(shù)字的PHP方法、Asp方法和MsSQL方法、MySQL方法
  • 利用mysql的inet_aton()和inet_ntoa()函數(shù)存儲IP地址的方法分享
  • MySql通過ip地址進行訪問的方法

標(biāo)簽:長沙 吉安 武漢 江門 潛江 合肥 南昌 東莞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實例》,本文關(guān)鍵詞  mysql,使用,inet,aton,和,ntoa,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實例》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章