精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MySQL中如何存儲IP地址

Android編程精選 ? 來源:CSDN技術社區 ? 作者:CSDN技術社區 ? 2022-08-11 11:02 ? 次閱讀

在看高性能MySQL第3版(4.1.7節)時,作者建議當存儲IPv4地址時,應該使用32位的無符號整數(UNSIGNED INT)來存儲IP地址,而不是使用字符串。但是沒有給出具體原因。

為了搞清楚這個原因,查了一些資料,記錄下來。

相對字符串存儲,使用無符號整數來存儲有如下的好處:

通常,在保存IPv4地址時,一個IPv4最小需要7個字符,最大需要15個字符,所以,使用VARCHAR(15)即可。

MySQL在保存變長的字符串時,還需要額外的一個字節來保存此字符串的長度。而如果使用無符號整數來存儲,只需要4個字節即可。

另外還可以使用4個字段分別存儲IPv4中的各部分,但是通常這不管是存儲空間和查詢效率應該都不是很高(可能有的場景適合使用這種方式存儲)。

使用字符串和無符號整數來存儲IP的具體性能分析及benchmark,可以看這篇文章。

https://bafford.com/2009/03/09/mysql-performance-benefits-of-storing-integer-ip-addresses/

使用無符號整數來存儲也有缺點:

  • 不便于閱讀
  • 需要手動轉換

對于轉換來說,MySQL提供了相應的函數來把字符串格式的IP轉換成整數INET_ATON,以及把整數格式的IP轉換成字符串的INET_NTOA。

如下所示:

mysql>selectinet_aton('192.168.0.1');
+--------------------------+
|inet_aton('192.168.0.1')|
+--------------------------+
|3232235521|
+--------------------------+
1rowinset(0.00sec)

mysql>selectinet_ntoa(3232235521);
+-----------------------+
|inet_ntoa(3232235521)|
+-----------------------+
|192.168.0.1|
+-----------------------+
1rowinset(0.00sec)

對于IPv6來說,使用VARBINARY同樣可獲得相同的好處,同時MySQL也提供了相應的轉換函數,即INET6_ATONINET6_NTOA

對于轉換字符串IPv4和數值類型,可以放在應用層,下面是使用java代碼來對二者轉換

packagecom.mikan;

/**
*@authorMikan
*/
publicclassIpLongUtils{
/**
*把字符串IP轉換成long
*
*@paramipStr字符串IP
*@returnIP對應的long值
*/
publicstaticlongip2Long(StringipStr){
String[]ip=ipStr.split("\.");
return(Long.valueOf(ip[0])<returnlong值對應的字符串
*/
publicstaticStringlong2Ip(longipLong){
StringBuilderip=newStringBuilder();
ip.append(ipLong>>>24).append(".");
ip.append((ipLong>>>16)&0xFF).append(".");
ip.append((ipLong>>>8)&0xFF).append(".");
ip.append(ipLong&0xFF);
returnip.toString();
}

publicstaticvoidmain(String[]args){
System.out.println(ip2Long("192.168.0.1"));
System.out.println(long2Ip(3232235521L));
System.out.println(ip2Long("10.0.0.1"));
}

}

輸出結果為:

3232235521
192.168.0.1
167772161

	
					

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    577

    瀏覽量

    20488
  • IPv4
    +關注

    關注

    0

    文章

    142

    瀏覽量

    19869
  • MySQL
    +關注

    關注

    1

    文章

    802

    瀏覽量

    26452

原文標題:面試官:如果要存 IP 地址,用什么數據類型比較好?99%人都會答錯!

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    購買海外虛擬IP地址可以通過以下幾種方式#虛擬IP地址

    ip地址
    jf_62215197
    發布于 :2024年08月16日 07:16:04

    什么是IP地址?

    什么是IP地址? 臺連接到互聯網上的計算機都有個獨有的標識碼,稱為IP地址。典型的IP地址如下
    發表于 08-06 09:41 ?2055次閱讀

    IP地址,IP地址是什么意思

    IP地址,IP地址是什么意思 基本定義 IP地址都是一個十分重要的概念,INTERNET的許多
    發表于 04-03 15:12 ?1669次閱讀

    mac地址ip地址是什么決定的

    IP地址是指互聯網協議地址(英語:Internet Protocol Address,又譯為網際協議地址),是IP Address的縮寫。
    發表于 03-07 17:14 ?7690次閱讀
    mac<b class='flag-5'>地址</b>和<b class='flag-5'>ip</b><b class='flag-5'>地址</b>是什么決定的

    如何查看Linuxip地址

    在排除網絡問題,設置新連接或配置防火墻時,了解設備的 IP 地址非常重要。下面我們就來看看Linux查看ip地址的方法吧!
    發表于 05-25 09:35 ?2871次閱讀
    如何查看Linux<b class='flag-5'>中</b>的<b class='flag-5'>ip</b><b class='flag-5'>地址</b>

    海外服務器IP地址都有哪些類型

    服務器的IP地址和物理地址的關系 每個設備都會有一個自己的物理地址,同互聯網IP
    的頭像 發表于 04-29 15:10 ?6768次閱讀

    IP地址是什么,IP地址的分類有哪些

    一、IP地址概念 IP地址是一個32位的二進制數,它由網絡ID和主機ID兩部份組成,用來在網絡唯一的標識的一臺計算機。網絡ID用來標識計算
    發表于 05-20 13:34 ?1.4w次閱讀

    什么是IP地址 IP地址=IPV4的地址?

    在生活我們使用具有上網功能的電子設備都有IP地址,就跟每個人都有自己的名字一樣。IP地址分為IPV4 IPV6,我們所說的的
    發表于 11-21 10:50 ?8968次閱讀

    如何使用WINDAQ MySQL存儲數據

    MySQL數據庫可以存儲比Microsoft Excel電子表格多30,000倍的數據。用于 結合WinDaq/Lite,Pro或Pro+,WinDaq / MySQL對于那些需要存儲
    的頭像 發表于 12-02 16:29 ?902次閱讀
    如何使用WINDAQ <b class='flag-5'>MySQL</b><b class='flag-5'>存儲</b>數據

    什么是IP地址 IP子網劃分VLSM詳解

    網絡掩碼值為1的bit對應IP地址的網絡位;為0的bit對應IP地址的主機位,以此來輔助我們
    發表于 08-10 10:00 ?4266次閱讀
    什么是<b class='flag-5'>IP</b><b class='flag-5'>地址</b> <b class='flag-5'>IP</b>子網劃分VLSM詳解

    MySQL中用什么數據類型存IP地址

    提到 IP 地址(IPv4),大伙兒腦子里肯定馬上能浮現類似于 192.168.0.1、127.0.0.1 這種常見的 IP 地址,然后結合這個問題 “
    的頭像 發表于 08-25 14:39 ?567次閱讀
    <b class='flag-5'>MySQL</b>中用什么數據類型存<b class='flag-5'>IP</b><b class='flag-5'>地址</b>

    MySQL數據庫的url地址

    (Protocol):MySQL數據庫使用的協議通常是MySQL自定義的協議,它使用TCP/IP協議在客戶端和服務器之間進行通信。在URL地址
    的頭像 發表于 12-06 10:58 ?2560次閱讀

    服務器集群 IP 地址管理混亂

    服務器集群為各種關鍵業務提供強大的計算和存儲能力。但如果服務器集群的 IP 地址管理混亂會給服務的部署和維護帶來影響。 服務器集群與 IP 地址
    的頭像 發表于 08-01 14:45 ?248次閱讀

    IP地址的分配

    ,全球唯一。 私有IP地址:用于局域網(LAN)內的地址,不在互聯網上傳輸。它們可以在多個網絡重復使用。 私有IP
    的頭像 發表于 08-09 14:55 ?490次閱讀

    IP地址小分享

    一、IP地址的作用與重要性 唯一標識:在網絡通信中,每個連接到互聯網的設備都必須擁有唯一的IP地址,這樣才能確保數據在網絡中正確地路由和傳遞。想象一下,如果網絡
    的頭像 發表于 09-25 14:21 ?171次閱讀
    <b class='flag-5'>IP</b><b class='flag-5'>地址</b>小分享