mysql数据库ip地址_MySQL数据库存储IP地址的方法
為什么要問如何存儲IP?
首先就來闡明一下部分人得反問:為什么要問IP得怎樣存,直接varchar類型不就得了嗎?
其實做任何程序設計都要在功能實現的基礎上最大限度的優化性能。而數據庫設計是程序設計中不可忽略的一個重要部分,所以巧存IP地址可以一定程度獲得很大提升。
利用函數算法處理
在MySQL中沒有直接提供IP類型字段,但如果有兩個函數可以把IP與最大長度為10位數字類型互轉,所以使用int類型存儲IP比varchar類型存儲IP地址性能要提升很多,減少不少空間。因為varchar是可變長形,需要多余的一個字節存儲長度。另外int型在邏輯運算上要比varchar速度快。
IP轉數字函數inet_aton()
我們轉換下幾個常用的IP地址
[sql]?view plaincopy
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()
[sql]?view plaincopy
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地址_MySQL数据库存储IP地址的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 接收udp数据_聊聊UDP、TCP和实现
- 下一篇: 批量插入数据到mysql_批量插入数据到