為什麼要問如何儲存IP

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

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

利用函式演算法處理

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

IP轉數字函式inet_aton()

所以IP的表字段可以設定為INT就好,如果IP獲取不到可以直接存0代表獲取不到IP的意思

數字轉IP函式inet_ntoa()

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