程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> IP處置函數inet_aton()和inet_ntoa()應用解釋

IP處置函數inet_aton()和inet_ntoa()應用解釋

編輯:MySQL綜合教程

IP處置函數inet_aton()和inet_ntoa()應用解釋。本站提示廣大學習愛好者:(IP處置函數inet_aton()和inet_ntoa()應用解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是IP處置函數inet_aton()和inet_ntoa()應用解釋正文


MYSql的IP對int的轉換函數
select inet_aton(ip) from table_name;

收集地址:
192.168.33.123
每個值最年夜不會超出255,也就是十六進制的FF,兩個Byte恰好表現的最年夜值是255,
如許子,便可以用一個32位的整形來保留這個地址
192 168 33 123
1100 0000 1010 1000 0010 0001 0111 1011
把這些二進制合在一路就是32位的數了
11000000101010000010000101111011
十進制為
3232244091
* INET_ATON(expr)
給出一個作為字符串的收集地址的"點地址"(如127.0.0.1)表現,前往一個代表該地址數值的整數。地址可所以4或8比專程址。
mysql> SELECT INET_ATON('209.207.224.40');
-> 3520061480
發生的數字老是依照收集字節次序。如下面的例子,數字依照 209×2^24 + 207×2^16 + 224×2^8 + 40 停止盤算。
INET_ATON() 也能懂得短格局 IP 地址:

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-> 2130706433, 2130706433
正文: 在存儲由INET_ATON() 發生的值時,推舉你應用 INT UNSIGNED 列。假設你應用 (帶符號) INT列, 則響應的第一個八位組年夜於127的IP 地址值會被截至 2147483647 (即, INET_ATON('127.255.255.255') 所前往的值)。請拜見11.2節,“數值類型”。
* INET_NTOA(expr)
給定一個數字收集地址 (4 或 8 比特),前往作為字符串的該地址的電地址表現。
mysql> SELECT INET_NTOA(3520061480);

-> '209.207.224.40'


在做項目時,其實不曉得這兩個函數,所以對IP的處置都是本身寫的函數,然則應用時效力倒是非常的差,上面函數是把IP轉化成整數:

CREATE FUNCTION `transIPtoInt`(ip char(31)) RETURNS char(31)
begin
DECLARE value1 CHAR(10);
DECLARE value2 CHAR(10);
DECLARE value3 CHAR(10);
DECLARE value4 CHAR(10);
set value1=SUBSTRING_INDEX(ip, '.', 1);
set value2=SUBSTRING_INDEX(ip, '.', 2);
set value2=SUBSTRING_INDEX(value2, '.', -1);
set value3=SUBSTRING_INDEX(ip, '.', -2);
set value3=SUBSTRING_INDEX(value3, '.', 1);
set value4=SUBSTRING_INDEX(ip, '.', -1);
set value1=value1<<24;
set value2=value2<<16;
set value3=value3<<8;
return value1+value2+value3+value4;
end;

為了IP地址比擬的便利,我還寫了一個把IP地址中每段都補足三位的函數,以下:

CREATE FUNCTION `fillIp`(ip char(31)) RETURNS char(31)
begin
DECLARE value1 CHAR(31);
DECLARE value2 CHAR(10);
DECLARE value3 CHAR(10);
DECLARE value4 CHAR(10);
set value1=SUBSTRING_INDEX(ip, '.', 1);
set value2=SUBSTRING_INDEX(ip, '.', 2);
set value2=SUBSTRING_INDEX(value2, '.', -1);
set value3=SUBSTRING_INDEX(ip, '.', -2);
set value3=SUBSTRING_INDEX(value3, '.', 1);
set value4=SUBSTRING_INDEX(ip, '.', -1);
set value1=LPAD(value1,3,'0');
set value2=LPAD(value2,3,'0');
set value3=LPAD(value3,3,'0');
set value4=LPAD(value4,3,'0');
return CONCAT(value1,'.',value2,'.',value3,'.',value4);
end;

以下是一些彌補
* INET_ATON(expr)
給出一個作為字符串的收集地址的"點地址"(如127.0.0.1)表現,前往一個代表該地址數值的整數。地址可所以4或8比專程址。
mysql> SELECT INET_ATON('209.207.224.40');
-> 3520061480
發生的數字老是依照收集字節次序。如下面的例子,數字依照 209×2563 + 207×2562 + 224×256 + 40 停止盤算。
INET_ATON() 也能懂得短格局 IP 地址:
mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-> 2130706433, 2130706433
正文: 在存儲由INET_ATON() 發生的值時,推舉你應用 INT UNSIGNED 列。假設你應用 (帶符號) INT列, 則響應的第一個八位組年夜於127的IP 地址值會被截至 2147483647 (即, INET_ATON('127.255.255.255') 所前往的值)。請拜見MySQL文檔中的“數值類型”。
* INET_NTOA(expr)
給定一個數字收集地址 (4 或 8 比特),前往作為字符串的該地址的電地址表現。
*
mysql> SELECT INET_NTOA(3520061480);
-> '209.207.224.40'

--------------------------------------------------------------------------------------------------

整型字段的比擬比字符串效力高許多,這也相符一項優化准繩:字段類型界說應用最適合(最小),最簡略的數據類型。
inet_aton()算法,其實借用了國際上對列國IP地址的辨別中應用的ip number。
a.b.c.d 的ip number是:
a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方。

--------------------------------------------------------------------------------------------------

應用mysql的內置函數處置時光戳成績
eg : select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');
成果: 2004 3rd August 03:35:48 2004
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved