《Mysql應(yīng)用MySQL存儲IP地址的方法》要點:
本文介紹了Mysql應(yīng)用MySQL存儲IP地址的方法,希望對您有用。如果有疑問,可以聯(lián)系我們。
為什么要問如何存儲IP?MYSQL數(shù)據(jù)庫
首先就來闡明一下部分人得反問:為什么要問IP得怎樣存,直接varchar類型不就得了嗎?MYSQL數(shù)據(jù)庫
其實做任何程序設(shè)計都要在功能實現(xiàn)的基礎(chǔ)上最大限度的優(yōu)化性能.而數(shù)據(jù)庫設(shè)計是程序設(shè)計中不可忽略的一個重要部分,所以巧存IP地址可以一定程度獲得很大提升.MYSQL數(shù)據(jù)庫
利用函數(shù)算法處理MYSQL數(shù)據(jù)庫
在MySQL中沒有直接提供IP類型字段,但如果有兩個函數(shù)可以把IP與最大長度為10位數(shù)字類型互轉(zhuǎn),所以使用int類型存儲IP比varchar類型存儲IP地址性能要提升很多,減少不少空間.因為varchar是可變長形,需要多余的一個字節(jié)存儲長度.另外int型在邏輯運算上要比varchar速度快.MYSQL數(shù)據(jù)庫
?
IP轉(zhuǎn)數(shù)字函數(shù)inet_aton()MYSQL數(shù)據(jù)庫
我們轉(zhuǎn)換下幾個常用的IP地址MYSQL數(shù)據(jù)庫
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的表字段可以設(shè)置為INT(10)就好,如果IP獲取不到可以直接存0代表獲取不到IP的意思MYSQL數(shù)據(jù)庫
?MYSQL數(shù)據(jù)庫
數(shù)字轉(zhuǎn)IP函數(shù)inet_ntoa()MYSQL數(shù)據(jù)庫
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轉(zhuǎn)換為 0.0.0.0MYSQL數(shù)據(jù)庫
?整型字段的比較比字符串效率高很多,這也符合一項優(yōu)化原則:字段類型定義使用最合適(最小),最簡單的數(shù)據(jù)類型.
inet_aton()算法,其實借用了國際上對各國IP地址的區(qū)分中使用的ip number.
a.b.c.d 的ip number是:
a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方.MYSQL數(shù)據(jù)庫
以上講解的就是MySQL存儲IP地址的方法,希望能夠?qū)Υ蠹业膶W(xué)習(xí)有所幫助.MYSQL數(shù)據(jù)庫
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/1275.html