国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL存儲IP地址的方法

2024-07-24 13:07:45
字體:
來源:轉載
供稿:網友

本文介紹了MySQL存儲IP地址的方法其目的就是最大限度的優化性能,需要的朋友可以參考下

為什么要問如何存儲IP?

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

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

利用函數算法處理

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

IP轉數字函數inet_aton()

我們轉換下幾個常用的IP地址

 

 
  1. mysql> select inet_aton('255.255.255.255'); 
  2. +------------------------------+ 
  3. | inet_aton('255.255.255.255') | 
  4. +------------------------------+ 
  5. | 4294967295 | 
  6. +------------------------------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9. mysql> select inet_aton('192.168.1.1');  
  10. +--------------------------+ 
  11. | inet_aton('192.168.1.1') | 
  12. +--------------------------+ 
  13. | 3232235777 | 
  14. +--------------------------+ 
  15. 1 row in set (0.00 sec) 
  16.  
  17. mysql> select inet_aton('10.10.10.10'); 
  18. +--------------------------+ 
  19. | inet_aton('10.10.10.10') | 
  20. +--------------------------+ 
  21. | 168430090 | 
  22. +--------------------------+ 
  23. 1 row in set (0.00 sec) 

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

數字轉IP函數inet_ntoa()

 

 
  1. mysql> select inet_ntoa(4294967295); 
  2. +-----------------------+ 
  3. | inet_ntoa(4294967295) | 
  4. +-----------------------+ 
  5. | 255.255.255.255 | 
  6. +-----------------------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9. mysql> select inet_ntoa(3232235777); 
  10. +-----------------------+ 
  11. | inet_ntoa(3232235777) | 
  12. +-----------------------+ 
  13. | 192.168.1.1 | 
  14. +-----------------------+ 
  15. 1 row in set (0.00 sec) 
  16.  
  17. mysql> select inet_ntoa(168430090); 
  18. +----------------------+ 
  19. | inet_ntoa(168430090) | 
  20. +----------------------+ 
  21. | 10.10.10.10 | 
  22. +----------------------+ 
  23. 1 row in set (0.00 sec) 
  24.  
  25. mysql> select inet_ntoa(0);  
  26. +--------------+ 
  27. | inet_ntoa(0) | 
  28. +--------------+ 
  29. | 0.0.0.0 | 
  30. +--------------+ 
  31. 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地址的方法,希望能夠對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 慈溪市| 海门市| 峡江县| 紫金县| 穆棱市| 太仆寺旗| 双江| 辽源市| 花莲县| 濮阳县| 阿城市| 镇安县| 泗阳县| 宽城| 铁岭市| 武穴市| 巴南区| 任丘市| 东光县| 泽库县| 贡山| 哈巴河县| 深水埗区| 张家界市| 广州市| 清镇市| 平武县| 鄂托克旗| 陇川县| 于田县| 辽宁省| 东平县| 金塔县| 城固县| 盐山县| 衡水市| 芒康县| 正宁县| 安福县| 黄梅县| 阳西县|