在MySQL中如何存储一个IPv4地址?

在MySQL如何存储IPv4地址?这个在秋招面试的过程中被问到过,没有答上来,今天猛地想起了这个问题,做一下复盘。

一个IPv4地址是由32位二进制来表示的,用点分十进制表示可以划分为4部分,每部分占8位,例如192.168.1.8

基本上有两种方案:

  • 直接使用char来存储固定的字符串
  • 将ip地址转换为整型

存储为整型

每个ip地址二进制表示都是唯一的且都是非负数,因此我们可以将一个ip地址转换为一个无符号整型。

为什么是无符号整型?
在MySQL中,一个int是32位,但是int是有符号的,因此表示完整一个ipv4地址。
而unsigned int是32位且没有负数,因此刚好可以完整表示一个ipv4地址。
而使用64位整型就造成了浪费。

192.168.1.8为例,说一下具体的思路:
在存入时,需要将ipv4转换为整数:

  1. 我们接受到的ipv4的参数肯定是一个字符串,我们按照点分割成四部分:19216818
  2. 对于第一部分192,我们左移24位,第二部分168左移16位,第三部分1左移8位,第四部分8不动
  3. 将这四部分直接相加,就得到了最终要存储的值,然后将这个值传给MySQL进行存储就可以了

在取出时,需要将整数转换为ipv4的字符串:

  1. 对于这个整数,取后8位,就得到了8
  2. 然后将整数右移8位,继续取后8位,就得到了1,以此类推
    同理,左移取前8位也是可以的。

在MySQL中的支持

对于将ipv4转换为整数,以及将整数转换为ipv4,在MySQL中是有两个函数的,我们可以直接使用:

  • INET_ATON() 函数将IPv4地址转换为一个无符号整数。它接受一个点分十进制的IPv4地址,返回对应的整数值。
  • INET_NTOA() 函数则将整数形式的IPv4地址转换回点分十进制表示法

总结

ipv4直接存储为字符串
优点是:易读、灵活
缺点:占用更多的空间

ipv4转换为整数:
优点:节省空间、便于比较
缺点:不易读、需要额外的运算

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云时空社会化商业 ERP 系统 service SQL 注入漏洞复现

0x01 产品简介 时空云社会化商业ERP(简称时空云ERP) ,该产品采用JAVA语言和Oracle数据库, 融合用友软件的先进管理理念,汇集各医药企业特色管理需求,通过规范各个流通环节从而提高企业竞争力、降低人员成本…

【开题报告】基于SpringBoot的婚纱店试妆预约平台的设计与实现

1.选题背景 婚礼是人生中的重要时刻,而试妆是婚礼准备过程中不可或缺的一环。传统的婚纱店试妆预约方式通常需要亲自到店或通过电话预约,这样的方式可能存在一些问题。首先,用户需要花费时间和精力到店进行预约,对于忙碌的现代人…

『PyTorch学习笔记』分布式深度学习训练中的数据并行(DP/DDP) VS 模型并行

分布式深度学习训练中的数据并行(DP/DDP) VS 模型并行 文章目录 一. 介绍二. 并行数据加载2.1. 加载数据步骤2.2. PyTorch 1.0 中的数据加载器(Dataloader) 二. 数据并行2.1. DP(DataParallel)的基本原理2.1.1. 从流程上理解2.1.2. 从模式角度理解2.1.3. 从操作系统角度看2.1.…

11-22 SSM3

书城分页查询 使用mybatis分页插件: 请完成登陆注册 -> 跳转到首页 解决前端上架时间点击切换 以及侧边栏点击由背景颜色的改变 完成超链接的绑定点击时间 -> jquery $(document).ready(function() { // 初始化上架时间状态为 true(上架&…

简明指南:使用Kotlin和Fuel库构建JD.com爬虫

概述 爬虫,作为一种自动化从网络上抓取数据的程序,广泛应用于数据分析、信息提取以及竞争对手监控等领域。不同的实现方式和编程语言都能构建出高效的爬虫工具。在本文中,我们将深入介绍如何充分利用Kotlin和Fuel库,构建一个简单…

使用tensorflow2.15.0版跑bert模型遇到的问题记录

背景 使用官方的bert模型https://github.com/google-research/bert作文本分类时(运行run_classifier.py函数),遇到的一些问题记录 问题记录 官方模型要求的版本是tensorflow > 1.11.0,现在安装的是2.15.0,2.x版和1.x版之间有一些函数变…

道路病害检测数据集RDD2022的标签映射关系【参考自官网给出的label_map.pbtxt文件,附查看代码】

TOC 结论 Label ID: 1, Label Name: D00 Label ID: 2, Label Name: D10 Label ID: 3, Label Name: D20 Label ID: 4, Label Name: D40链接地址 https://github.com/sekilab/RoadDamageDetector/ 查看代码 # 打开 label_map.pbtxt 文件 def read_label_map(file_path):label…

【稳定检索|投稿优惠】2024年经济管理与安全科学国际学术会议(EMSSIC 2024)

2024年经济管理与安全科学国际学术会议(EMSSIC 2024) 2024 International Conference on Economic Management and Security Sciences(EMSSIC 2024) 一、【会议简介】 2024年经济管理与安全科学国际学术会议(EMSSIC 2024),将于繁华的上海城召开。这次会议的主题是“…

C++基础——模板

文章目录 1 概述2 函数模板2.1 使用函数模板2.2 函数模板注意事项2.3 普通函数和函数模板的区别2.4 普通函数与函数模板的调用规则2.5 模板的局限性 2 类模板2.1 类模板语法2.2 类模板和函数模板的区别2.3 类模板中成员函数的创建时机2.4 类模板与继承2.5 类模板成员函数类外实…

C++17那些事开篇之类模版参数推导(CTAD)

C17那些事开篇之类模版参数推导(CTAD) 引入 大家好,我是光城,今天开始正式开篇C17的新特性了,期待不,欢迎留言区说出想要更新的特性呀~ C模板元编程一直是C开发者们熟知的一项功能,无论是初学者还是高级开发…

【猜数字游戏】用wxPython实现:基本的游戏框架 + 简单的图形用户界面

【猜数字游戏】 写在最前面猜数字游戏 实现【猜数字游戏】安装wxPython全部代码代码解析1. 初始化界面2. 生成随机数3. 处理猜测4. 特殊功能5. 分数计算 游戏小程序呈现结语 写在最前面 看到了一个比较有意思的问题 https://ask.csdn.net/questions/8038039 猜数字游戏 在这…

苹果TF签名全称TestFlight签名,需要怎么做才可以上架呢?

如果你正在开发一个iOS应用并准备进行内测,TestFlight是苹果提供的一个免费的解决方案,它使开发者可以邀请用户参加应用的测试。以下是一步步的指南,教你如何利用TestFlight进行内测以便于应用后续可以顺利上架App Store。 1: 准备工作 在测…

ceph编译

1.执行./install-deps.sh提示deb无法安装 解决方案: 直接使用dpkg -i来安装deb,会提示缺失3个库,库名如下: cython python dh-systemd 其中cython和python手动安装好后,也会依旧报错。此时修改debian/control文件&…

客餐书房一体布局,新中式风格禅意十足。福州中宅装饰,福州装修

你是否曾经遇到过这样的痛点:装修时不知道该选择什么样的风格,让家居空间显得既时尚又实用?如果你对此感到困惑,那么新中式风格可能正是你想要的选择! 今天,我们将一起探讨一种别样的家居布局,它…

如何用量化交易“做空”来获取收益

最近的市场环境相当不好,今年一年都没有任何主线的模式情况下去交易。更多的都是题材热点聚焦,而且板块轮动过快。市场环境不好的情况下,我们如何通过“做空”来获取收益!量化做空是指利用计算机模型和算法,通过分析市…

EasyExcel如何读取全部Sheet页数据方法

一、需求描述 Excel表格里面大约有20个sheet页,每个sheet页65535条数据,需要读取全部数据,并导入至数据库。 找了好多种方式,EasyExcel比较符合,下面看代码。 二、实现方式 采用EasyExcel框架的doReadAll()方法 1、…

python监控显卡显存

文章目录 内存监控进程监控获取进程pid管理进程pid的死活 内存监控 在工作组中,经常会遇到多人争抢显卡的情况,僧多肉少,所以可以做个监控显卡的头部程序,然后再调取主程序训练模型。 我们借用pynvml,没有安装的&…

【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

目录 Redis的慢查询 慢查询配置 慢查询操作命令 慢查询建议 Pipeline 事务 Redis的事务原理 Redis的watch命令 Pipeline和事务的区别 Lua Lua入门 安装Lua Lua基本语法 注释 标示符 关键词 全局变量 Lua中的数据类型 Lua 中的函数 Lua 变量 Lua中的控制语句…

Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏,实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的b…

蓝桥杯-02-蓝桥杯C/C++组考点与14届真题

文章目录 蓝桥杯C/C组考点与14届真题参考资源C/C组考点1. 组别2. 竞赛赛程3. 竞赛形式4. 参赛选手机器环境5. 试题形式5.1. 结果填空题5.2. 编程大题 6. 试题考查范围7. 答案提交8. 评分9. 样题样题 1:矩形切割(结果填空题)样题 2&#xff1a…