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

    文章

    552

    浏览量

    20135
  • IPv4
    +关注

    关注

    0

    文章

    131

    浏览量

    19689
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26006

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

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

收藏 人收藏

    评论

    相关推荐

    MySql存储过程是什么?

    MySql——存储过程
    发表于 11-06 09:26

    mysql存储过程和函数是什么

    mysql存储过程和函数
    发表于 05-13 11:51

    IP地址及性能操作

    1 IP地址配置
    发表于 08-30 15:57 21次下载

    什么是IP地址

    什么是IP地址? 为了能直接找到这些计算机,互联网上的每台计算机均指定有一个唯一的地址,称为IP地址
    发表于 08-05 08:58 2188次阅读

    什么是IP地址

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

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

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

    MySQL5新特性之存储过程

    MySQL5新特性之存储过程 MySQL5新特性之存储过程 MySQL5新特性之存储过程
    发表于 06-12 10:08 0次下载

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

    IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。
    发表于 03-07 17:14 6752次阅读
    mac<b class='flag-5'>地址</b>和<b class='flag-5'>ip</b><b class='flag-5'>地址</b>是什么决定的

    ip地址分类及范围_ip地址由什么组成

     一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。A类IP
    发表于 01-11 14:55 2.5w次阅读

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

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

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

    一、IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段;主 机ID用来标识计算机在网段
    发表于 05-20 13:34 9421次阅读

    sdwan云,什么是 IP 地址?你的IP地址是什么?

    IP 地址是互联网的基本组成部分之一,但如果攻击者获得您的地址,可能会带来潜在的安全责任。IP 地址是分配给连接到使用 Internet 协
    的头像 发表于 07-28 11:28 851次阅读

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

    在生活中我们使用具有上网功能的电子设备都有IP地址,就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6,我们所说的的IP
    发表于 11-21 10:50 5893次阅读

    MySQL中用什么数据类型存IP地址

    提到 IP 地址(IPv4),大伙儿脑子里肯定马上能浮现类似于 192.168.0.1、127.0.0.1 这种常见的 IP 地址,然后结合这个问题 “
    的头像 发表于 08-25 14:39 341次阅读
    <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 994次阅读