面试官:如果要存ip地址,用什么数据类型比较好?

基于扩展卡尔曼滤波(EKF)结合到达时间(TDOA)、到达频率(FDOA)实现多无人机无源定位,MATLAB代码 该程序实现了一种结合到达时间差(TDOA)和到达频率差(FDOA)技术的多无人机定位方法,利用扩展卡尔曼滤波(EKF)对单一目标进行定位。程序通过模拟多无人机的运动及其与目标的相对位置,估计目标的状态(位置和速度)。 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构

RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能:

  • 多模块:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 微服务:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本 

来源:飞天小牛肉


提到 IP 地址(IPv4),大伙儿脑子里肯定马上能浮现类似于 192.168.0.1、127.0.0.1 这种常见的 IP 地址,然后结合这个问题 “MySQL 中用什么数据类型存 IP 地址?”,于是乎脱口而出用 char 字符串类型存。

面试官一脸冷漠,你顿时意识到情况不对,又仔细琢磨了一下。

然后发现,这个 IP 地址的长度是变化的,最短可以是 0.0.0.0 只需要 7 位,最长可以是 255.255.255.255 需要 15 位,于是自信地回答使用 varchar(15) 来存储 IP 地址,并为自己能够想到这一层而暗自窃喜。

谁知面试官竟轻蔑一笑,问你 “确定吗?”,你觉得这是面试官在考验你,于是坚定的回答 “确定”。

然后就开始了下一题

......

人们经常使用 varchar(15) 列来存储 IP 地址,但事实上这并不是最优解。

IP 地址的本质是 32 位无符号整数,类似于 192.168.0.1 这种点分十进制的字符串写法只是为了帮助人们理解和记忆,192.168.0.1 对应的十进制表示是 无符号整数 3232235521。

所以,说用字符串类型存 IP 地址的,其实是潜意识中以为 IP 地址是字符串,存的是点分十进制的字符串,但正确的应该是存 32 位的无符号整数

所谓有符号数其实就是将最高位作为符号位,比如 32 位的有符号 INT,最高位是符号位,剩下 31 位才是真实的数值,所以有符号 INT 的取值区间为:

无符号 INT 的取值区间为:

下表列出了 MySQL 出各个整数类型有符号和无符号的的取值范围,在定义表时,可以在数据类型后面添加关键字 UNSIGNED 来定义无符号整数,否则默认为有符号整数:

类型

有符号数取值范围

无符号数取值范围

TINYINT(1 字节,8 bit)

-128 〜 127

0 〜 255

SMALLINT(2 字节,16 bit)

-32768 〜 32767

0 〜 65535

MEDIUMINT(3 字节,24 bit)

-8388608 〜 8388607

0 〜 16777215

INT(4 字节,32 bit)

-2147483648 〜 2147483647

0 〜 4294967295

BIGINT(8 字节,64 bit)

-9223372036854775808 〜 9223372036854775807

0 〜 18446744073709551615

结合上表,可以看出,32 位的无符号  INT 正好可以容纳 IPv4 地址,下面是 INT UNSIGNED 和 VARCHAR(15) 两种数据类型的对比:

  1. 存储空间:4 字节的 INT 类型 15 字节的  VARCHAR(15) 更加节省存储空间。另外,VARCHAR 除了会保存需要的字符数,还会另加一个字节来记录长度(如果列声明的长度超过 255,则使用两个字节记录长度),所以 VARCHAR(15) 其实要占用 16 个字节。

  2. 检索速度:如果我们要在 IP 地址上建立索引,那么对于字符串索引来说,整数索引的检索速度简直就是降纬打击了,因为字符串类型的比较是需要从第一位字符开始遍历依次进行的,速度较慢。

MySQL 非常贴心地提供了 IPv4 地址点分十进制和无符号整数的相互转换函数,inet_aton 和 inet_ntoa(底层是二进制移位操作,速度很快):

当然你更应该在业务中去执行这些转换,减轻 MySQL 的压力。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Uni-App推送踩坑实录:从云函数URL化到后台推送失效,我都经历了什么 本文详细记录了Uni-App开发者在接入uni-push 2.0时遇到的推送失效问题,从云函数URL化到后台推送失效的完整排查过程。通过系统化分析和与官方沟通,最终找到解决方案,并分享了预防措施与最佳实践,帮助开发者避免类似问题。 阅读详情

相关推荐

XDS110 USB Debug Probe连接错误-260:CCS Theia环境下的诊断与修复指南

本文详细解析了CCS Theia环境下XDS110 USB Debug Probe连接错误-260的诊断与修复方法。从硬件连接到驱动状态、固件更新到软件配置,提供了全面的排查指南,帮助开发者快速解决这一常见的调试器通信障碍问题,确保嵌入式开发工作流畅进行。

hope8的博客 282

我懵了,如果要存 IP 地址,用什么数据类型比较好?

提到 IP 地址(IPv4),大伙儿脑子里肯定马上能浮现类似于 192.168.0.1、127.0.0.1 这种常见的 IP 地址,然后结合这个问题 “MySQL 中用什么数据类型存 IP 地址?”,于是乎脱口而出用 char 字符串类型存。面试官一脸冷漠,你顿时意识到情况不对,又仔细琢磨了一下。然后发现,这个 IP 地址的长度是变化的,最短可以是 0.0.0.0 只需要 7 位,最长可以是 25...

Java笔记虾 292

PICO SCOPE 二次开发

基于C#开发一个简单的PICO示波器的上位机工作,与MCC600运动控制卡一起,实现数据自动采集

nixoncheng的博客 1147

项目上现在需要存储 IP 地址,数据库应该用什么类型来存储?

实际项目里,若主要存 IPv4 且看重查询效率、节省空间,可考虑整数类型(配合转换函数 );若要兼容 IPv6 ,简单场景用字符串类型,追求存储和查询优势可选 PostgreSQL 的 INET 等类型;对存储成本极致优化、能接受转换复杂度,二进制类型可尝试,具体结合项目数据库选型、IP 版本需求、查询场景来定。

weixin_43521001的博客 1061

【go-libp2p学习笔记】使用go-libp2p搭建中转服务器(circuit relay server)

libp2p算是一个蛮新的库,提供了非常强大的p2p节点发现/连接/通信能力。IPFS的基石。 中文网上的**技术教程**比较少,所以抛砖引玉开一点坑来体验一下!

Cake_C的博客 6491

基于CAT的VBM和SBM计算学习笔记(二)感兴趣区(ROI)&全脑体积(TIV)

本文介绍了用cat12运算VBM前,如何抓取ROI信息;运算VBM后,如何转化ROI文件和提取全脑体积,为之后的统计分析做好准备。t=N7T8基于CAT的VBM和SBM计算学习笔记(一)VBMhttps://mp.youkuaiyun.com/mp_blog/creation/editor/140665644。

Rose9614的博客 4358

Java之ip地址存储的数据类型

在java开发中,会遇到处理ip地址信息的需求,下面一起看看其应用方式。 通常情况下,mysql数据库中大家都会用字符串来存储ip地址,首先这样是可以的,没什么问题。那有没有其他的存储数据类型,其优缺点如何。 无符号整数方式 节省空间,不管是数据存储空间,还是索引存储空间 便于使用范围查询,between,且效率高 需要4个字节存储,采用字符串时,一个ipv4最小需要7个字符,最大需要15个字符,使用varchar(15),且还额外需要一个字节来保持字符串的长度 不便于阅读 需要手动转换(代码实现工具

ldcaws的专栏 2233

NPP/VIIRS夜间灯光数据:从下载到应用的完整指南

本文提供了NPP/VIIRS夜间灯光数据从下载、处理到应用的完整实战指南。详细介绍了如何从官方源获取数据、解读文件结构、进行坐标校正与数据清洗,并深入探讨了其在城市扩张监测、社会经济指标估算、重大事件影响评估等领域的核心应用。文章旨在帮助研究者与从业者快速掌握这一强大的空间数据,将其转化为研究中的实用工具。

gpu4optimizer的博客 863

面试官:如果要存ip地址,用什么数据类型比较好

在数据库中存储IP地址时,适合的数据类型取决于IP地址的版本,即IPv4或IPv6。:它是一个32位的数字,通常表示为四个十进制数(每个0到255)由点分隔的形式。:它是一个128位的数字,通常表示为八组四个十六进制数由冒号分隔的形式。对于同时兼容IPv4和IPv6的情况,可以选择使用或来确保足够的存储空间。如果要进行大量的IP地址查找、排序或比较操作,使用VARBINARY会比VARCHAR更高效,因为它避免了字符串比较的开销。然而,如果应用程序经常以可读格式显示IP地址,使用VARCHAR。

系统看你学习很认真,随机送了一个月会员! 1685

银河麒麟V10系统grub崩溃急救指南:从光盘救援到完整恢复(附常见错误排查)

本文详细介绍了银河麒麟V10系统grub崩溃的急救方法,从使用安装光盘进入救援环境到完整恢复系统的全流程。针对不同损坏程度(轻度、中度、严重)提供了分级恢复策略,包括grub2-install和grub2-mkconfig等关键命令的使用,并附有常见错误排查表,帮助用户快速解决引导问题。

weixin_30955617的博客 483

航空大数据——项目资源汇总及开源(四)

ADS-B项目开源大礼包

cyc头发还挺多的博客 4983

美团面试官:如果要存ip地址,用什么数据类型比较好

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达关注公众号后台回复pay或mall获取实战项目资料+视频来自:blog.youkuaiyun.com/mhmyqn/article/detai...

公众号-老炮说Java 388

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1731
上一篇: 为什么不让程序员直接对接客户,而是通过产品经理?
下一篇: IDEA 源码阅读利器,你居然还不会?
公众号-芋道源码
博客等级 码龄10年 1629粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值