解決mysql進行ip字串比較問題

2021-08-30 18:32:13 字數 2232 閱讀 9039

今天在研究純真ip資料庫,在對ip位址進行比較匹配的問題上花了很多時間,效果總是不太理想.

不經意間看到php存在這個函式:ip2long,就是將ip字串轉成長整型.所以下意識就覺得mysql應該也有.果然老天不負有心人,讓我終於找到了:inet_aton和inet_ntoa.

函式inet_aton和php的ip2long相似,是把字串轉成長整型.

而函式inet_ntoa是inet_aton的逆過程.

有了這兩個函式,在資料庫中操作ip就相當容易了.

另附件有mysql版的純真ip資料庫及php操作純真ip資料庫(dat檔案)的類:

<?php

/*** @author 馬秉堯

*/class iplocation

/*** 返回讀取的3個位元組的長整型數

** @access private

* @return int

*/function getlong3()

/*** 返回壓縮後可進行比較的ip位址

** @access private

* @param string $ip

* @return string

*/function packip($ip)

/*** 返回讀取的字串

** @access private

* @param string $data

* @return string

*/function getstring($data = "")

return $data;

}/**

* 返回地區資訊

** @access private

* @return string

*/function getarea()

return $area;

}/**

* 根據所給 ip 位址或網域名稱返回所在地區資訊

** @access public

* @param string $ip

* @return array

*/function getlocation($ip)

else

else }}

//獲取查詢到的ip地理位置資訊

fseek($this->fp, $findip);

$location['beginip'] = long2ip($this->getlong()); // 使用者ip所在範圍的開始位址

$offset = $this->getlong3();

fseek($this->fp, $offset);

$location['endip'] = long2ip($this->getlong()); // 使用者ip所在範圍的結束位址

$byte = fread($this->fp, 1); // 標誌位元組

switch (ord($byte))

break;

case 2: // 標誌位元組為2,表示國家資訊被重定向

fseek($this->fp, $this->getlong3());

$location['country'] = $this->getstring();

fseek($this->fp, $offset + 8);

$location['area'] = $this->getarea();

break;

default: // 否則,表示國家資訊沒有被重定向

$location['country'] = $this->getstring($byte);

$location['area'] = $this->getarea();

break;

}if ($location['country'] == " cz88.net")

if ($location['area'] == " cz88.net")

return $location;

}/**

* 建構函式,開啟 qqwry.dat 檔案並初始化類中的資訊

** @param string $filename

* @return iplocation

*/function iplocation($filename = "qqwry.dat")

}/**

* 析構函式,用於在頁面執行結束後自動關閉開啟的檔案。**/

function _iplocation()

}?>

mysql字串亂碼 解決Mysql字串亂碼

1 字符集和字元序2 3 字符集 character set 定義了字元以及字元編碼。4 5 字元序 collation 定義了字元的比較規則。6 7 mysql支援多種字符集 與 字元序。8 9 乙個字符集對應至少一種字元序 一般是1對多 10 11 兩個不同的字符集不能有相同的字元序。12 13...

字串進行壓縮

通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1 僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2 壓縮欄位的格式為 字元重複的次數 字元 例如 字串 yyy...

字串進行壓縮

壓縮字串 1 2 壓縮操作類 3 4public static class compression523 2425 26 對byte陣列進行解壓 27 28 待解壓的byte陣列 29 解壓後的byte陣列 30public static byte decompress byte data 3140...