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])<< 24) + (Long.valueOf(ip[1]) << 16)
                + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
    }

    /**
     * 把IP的long值转换成字符串
     *
     * @param ipLong IP的long值
     * @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

    文章

    578

    浏览量

    20497
  • IPv4
    +关注

    关注

    0

    文章

    142

    浏览量

    19877
  • MySQL
    +关注

    关注

    1

    文章

    802

    浏览量

    26490

原文标题:面试官:如果要存 IP 地址,用什么数据类型比较好?99%人都会答错!

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    购买海外虚拟IP地址可以通过以下几种方式#虚拟IP地址

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

    什么是IP地址

    什么是IP地址? 台连接到互联网上的计算机都有个独有的标识码,称为IP地址。典型的IP地址如下
    发表于 08-06 09:41 2060次阅读

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

    IP地址,IP地址是什么意思 基本定义 IP地址都是一个十分重要的概念,INTERNET的许多
    发表于 04-03 15:12 1671次阅读

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

    IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。
    发表于 03-07 17:14 7709次阅读
    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 2881次阅读
    如何查看Linux<b class='flag-5'>中</b>的<b class='flag-5'>ip</b><b class='flag-5'>地址</b>

    海外服务器IP地址都有哪些类型

    服务器的IP地址和物理地址的关系 每个设备都会有一个自己的物理地址,同互联网IP
    的头像 发表于 04-29 15:10 6794次阅读

    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 9051次阅读

    如何使用WINDAQ MySQL存储数据

    MySQL数据库可以存储比Microsoft Excel电子表格多30,000倍的数据。用于 结合WinDaq/Lite,Pro或Pro+,WinDaq / MySQL对于那些需要存储
    的头像 发表于 12-02 16:29 909次阅读
    如何使用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 4309次阅读
    什么是<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 574次阅读
    <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 2606次阅读

    服务器集群 IP 地址管理混乱

    服务器集群为各种关键业务提供强大的计算和存储能力。但如果服务器集群的 IP 地址管理混乱会给服务的部署和维护带来影响。 服务器集群与 IP 地址
    的头像 发表于 08-01 14:45 263次阅读

    IP地址的分配

    ,全球唯一。 私有IP地址:用于局域网(LAN)内的地址,不在互联网上传输。它们可以在多个网络重复使用。 私有IP
    的头像 发表于 08-09 14:55 543次阅读

    IP地址小分享

    一、IP地址的作用与重要性 唯一标识:在网络通信中,每个连接到互联网的设备都必须拥有唯一的IP地址,这样才能确保数据在网络中正确地路由和传递。想象一下,如果网络
    的头像 发表于 09-25 14:21 185次阅读
    <b class='flag-5'>IP</b><b class='flag-5'>地址</b>小分享