不僅節省了儲存空間,對比較也是比較快的,畢竟對整型和對15個長的字元比較差別還是很大的,首先需要介紹兩個函式:inet_aton() 將ip轉為十進位制數字, inet_ntoa()將數字轉換為ip。
先來看ip的結構, 127.0.0.1(01111111 00000000 00000000 00000001) ,學計算機的對2的n次方比較敏感,一看就猜到是由 4個8位的二進位制數字組成, 對, 就是這樣!也就是說ip轉換成二進位制可以這樣:
select
concat
(bin
(127),
lpad
(bin(0
),8,
0),lpad
(bin(0
),8,
0),lpad
(bin(1
),8,0))
把每一位的前邊補0, 然後拼接起來,得到這樣的結果: 1111111000000000000000000000001
系統的inet_aton()函式也是這麼算的,不信可以對比一下結果:
select
bin(inet_aton
('127.0.0.1'))
;
得到的結果也是這樣: 1111111000000000000000000000001
所以得出結論: inet_aton() 就是把ip的每一段轉為二進位制拼接起來,然後將這個32位的二進位制數字轉為10進製
示例:
select
為什麼這麼儲存呢?
有人說節省空間, 也對, 不過比較蛋疼, 現在的硬碟那麼便宜在乎這點空間?
更為合理的解釋是, 方便查詢, 比如要查某一網段的所有ip就可以 :
select
*from
table
where
ip between inet_aton
('192.168.0.1'
)and inet_aton
('192.168.0.255'
)
為什麼同時需要IP位址和MAC位址
每個乙太網裝置在出廠時都有乙個唯一的mac位址,為什麼還需要為每台主機再分配乙個ip位址?或者說每台主機都分配唯一的ip位址,為什麼還要在網路裝置 如網絡卡,集線器,路由器等 生產時內嵌乙個唯一的mac位址呢?主要原因有以下幾點 1 ip位址的分配是根據網路的拓樸結構,而不是根據誰製造了網路設定。若...
有了MAC位址,為什麼還要IP位址
有了mac位址,為什麼還要ip位址?隨著網路裝置的增多,路由選擇變得困難 路徑多,計算量大 因此將網路劃分為多個子網。在路由選擇的過程中,將乙個子網看作乙個整體,路由器只需要選擇到達這個子網的路徑,到達之後的事情就交給子網內部了。雖然這樣的路徑選擇只能保證區域性最優不能保證全域性最優,但大大減少了路...
有了 IP 位址,為什麼還要用 MAC 位址?
估計很多人都有這個疑問,但沒見哪本書上解釋清楚,都只是描述ip是什麼,mac是什麼。當資料報到達區域網後,完全可以直接送到對應的ip位址主機,為什麼還要詢問一下對應ip主機的mac位址?乙個郵遞員拿著位址詳細到教室的一封信,收件人是小明,教室裡沒有重名的,郵遞員問 小明的學號是多少?小明站起來回答 ...