MySQL儲存IP地址的方法_Mysql

來源:互聯網
上載者:User

為什麼要問如何儲存IP?

首先就來闡明一下部分人得反問:為什麼要問IP得怎樣存,直接varchar類型不就得了嗎?

其實做任何程式設計都要在功能實現的基礎上最大限度的最佳化效能。而資料庫設計是程式設計中不可忽略的一個重要部分,所以巧存IP地址可以一定程度獲得很大提升。

利用函數演算法處理

在MySQL中沒有直接提供IP類型欄位,但如果有兩個函數可以把IP與最大長度為10位元字類型互轉,所以使用int類型儲存IP比varchar類型儲存IP地址效能要提升很多,減少不少空間。因為varchar是可變長形,需要多餘的一個位元組儲存長度。另外int型在邏輯運算上要比varchar速度快。

 
IP轉數字函數inet_aton()

我們轉換下幾個常用的IP地址

 mysql> select inet_aton('255.255.255.255'); +------------------------------+ | inet_aton('255.255.255.255') | +------------------------------+ |          4294967295 | +------------------------------+ 1 row in set (0.00 sec)   mysql> select inet_aton('192.168.1.1');   +--------------------------+ | inet_aton('192.168.1.1') | +--------------------------+ |        3232235777 | +--------------------------+ 1 row in set (0.00 sec)   mysql> select inet_aton('10.10.10.10'); +--------------------------+ | inet_aton('10.10.10.10') | +--------------------------+ |        168430090 | +--------------------------+ 1 row in set (0.00 sec)

所以IP的表欄位可以設定為INT(10)就好,如果IP擷取不到可以直接存0代表擷取不到IP的意思

 

數字轉IP函數inet_ntoa()

 mysql> select inet_ntoa(4294967295); +-----------------------+ | inet_ntoa(4294967295) | +-----------------------+ | 255.255.255.255    | +-----------------------+ 1 row in set (0.00 sec)  mysql> select inet_ntoa(3232235777); +-----------------------+ | inet_ntoa(3232235777) | +-----------------------+ | 192.168.1.1      | +-----------------------+ 1 row in set (0.00 sec)  mysql> select inet_ntoa(168430090); +----------------------+ | inet_ntoa(168430090) | +----------------------+ | 10.10.10.10     | +----------------------+ 1 row in set (0.00 sec)   mysql> select inet_ntoa(0);     +--------------+ | inet_ntoa(0) | +--------------+ | 0.0.0.0   | +--------------+ 1 row in set (0.00 sec)

注意,0轉換為 0.0.0.0

 整型欄位的比較比字串效率高很多,這也符合一項最佳化原則:欄位類型定義使用最合適(最小),最簡單的資料類型。
inet_aton()演算法,其實借用了國際上對各國IP地址的區分中使用的ip number。
a.b.c.d 的ip number是:
a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方。

以上講解的就是MySQL儲存IP地址的方法,希望能夠對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.