程式設計要在功能實現的基礎上最大限度的優化效能。而資料庫設計是程式設計中不可忽略的重要部分,巧存ip位址可以一定程度提公升效能。
mysql沒有直接提供ip型別字段,但有兩個函式可以把ip與最大長度為10位數字型別互轉,所以使用int型別儲存ip比varchar型別儲存ip位址效能要提公升很多,更節省儲存空間。varchar是可變長型別,需要多餘的乙個位元組長度。另外int型在邏輯運算上要比varchar速度快。
我們轉換下幾個常用的ip位址12
3456
78910
1112
1314
1516
1718
1920
2122
23mysql>
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的意思12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
31mysql>
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
*******************華麗分割***********************
以上為原文內容,實際使用中,換了一台ip位址較大的機器登陸後,發現資料庫中竟存入了乙個負值...
環境php+mysql+32位win7
於是查詢原因...此處省略3000字
結果如下:
解決方案:將mysql儲存ip的字段設定為bigint型別,否則會溢位
儲存ip之前,將ip2long轉換過的值處理為2進製,再處理回10進製,示例:bindec(decbin(ip2long('192.168.1.17'))); //3232235793
至此問題解決,後遺症暫未發現,發現再糾正...
from: 修正:faddei
php與memcached配合使用注意事項
1.memcached啟動的時候,如果指定了ip,則建立鏈結的時候socket會繫結到這個連線上。例如 home admin memcached bin memcached d m 5000 i 192.168.1.1 則socket繫結到了192.168.1.1上去,如果在php中鏈結的時候 通過...
採用php與Mysql資料庫完成使用者註冊登入等操作
採用php與mysql資料庫,完成使用者註冊程式,登錄檔單項可自由指定,盡量包含所有表單型別,註冊成功後在新頁面顯示註冊資訊,註冊中需要上傳的 的操作功能使用自定義函式呼叫,並在註冊成功後顯示 2 採用php與mysql資料庫,完成使用者登入功能。步驟如下 1 資料庫設計 users.sql set...
採用php與Mysql資料庫完成使用者註冊登入等操作
採用php與mysql資料庫,完成使用者註冊程式,登錄檔單項可自由指定,盡量包含所有表單型別,註冊成功後在新頁面顯示註冊資訊,註冊中需要上傳的 的操作功能使用自定義函式呼叫,並在註冊成功後顯示 2 採用php與mysql資料庫,完成使用者登入功能。步驟如下 1 資料庫設計 users.sql set...