MySQL中為什麼IP位址最好使用int型別?

2021-10-17 18:30:34 字數 1172 閱讀 9239

不僅節省了儲存空間,對比較也是比較快的,畢竟對整型和對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位址?乙個郵遞員拿著位址詳細到教室的一封信,收件人是小明,教室裡沒有重名的,郵遞員問 小明的學號是多少?小明站起來回答 ...