佳木斯湛栽影视文化发展公司

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

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

熱門標(biāo)簽:Linux服務(wù)器 鐵路電話系統(tǒng) 地方門戶網(wǎng)站 呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 服務(wù)外包 AI電銷 百度競(jìng)價(jià)排名

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

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

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

`ip` char(15) NOT NULL,

因?yàn)閕p地址(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提供了兩個(gè)方法來處理ip地址

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

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

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

顯示數(shù)據(jù)時(shí),使用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、比較方法

如果需要找出在某個(gè)網(wǎng)段的用戶(例如:172.16.11.1 ~ 172.16.11.100),可以利用php的ip2long方法,把ip地址轉(zhuǎn)為整型,再進(jì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)為整型時(shí),對(duì)于大的ip會(huì)出現(xiàn)負(fù)數(shù),出現(xiàn)原因及處理方法可以參考我另一篇文章:《詳談php ip2long 出現(xiàn)負(fù)數(shù)的原因及解決方法

4、總結(jié)

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

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

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

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

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

標(biāo)簽:湘潭 蘭州 湖南 衡水 黃山 崇左 仙桃 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql 使用inet_aton和inet_ntoa處理ip地址數(shù)據(jù)的實(shí)例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    崇左市| 绥滨县| 永顺县| 新民市| 通化市| 乡宁县| 普安县| 朝阳县| 丘北县| 汤阴县| 台中市| 灵山县| 秦皇岛市| 麻江县| 新巴尔虎右旗| 濉溪县| 利川市| 青川县| 西昌市| 泸定县| 荆州市| 长乐市| 壶关县| 河北省| 城固县| 叙永县| 泗阳县| 汾西县| 华亭县| 榆中县| 绩溪县| 韩城市| 江门市| 石河子市| 鲁甸县| 榆社县| 交口县| 合江县| 吴旗县| 夏河县| 玛曲县|