如何做关于网站推广的培训,wordpress 禁止评论,如何找到做网站的客户,asp网站建设中期报告在MySQL如何存储IPv4地址#xff1f;这个在秋招面试的过程中被问到过#xff0c;没有答上来#xff0c;今天猛地想起了这个问题#xff0c;做一下复盘。
一个IPv4地址是由32位二进制来表示的#xff0c;用点分十进制表示可以划分为4部分#xff0c;每部分占8位#xff…在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转换为整数
我们接受到的ipv4的参数肯定是一个字符串我们按照点分割成四部分192、168、1、8。对于第一部分192我们左移24位第二部分168左移16位第三部分1左移8位第四部分8不动将这四部分直接相加就得到了最终要存储的值然后将这个值传给MySQL进行存储就可以了
在取出时需要将整数转换为ipv4的字符串
对于这个整数取后8位就得到了8然后将整数右移8位继续取后8位就得到了1以此类推 同理左移取前8位也是可以的。
在MySQL中的支持
对于将ipv4转换为整数以及将整数转换为ipv4在MySQL中是有两个函数的我们可以直接使用
INET_ATON() 函数将IPv4地址转换为一个无符号整数。它接受一个点分十进制的IPv4地址返回对应的整数值。INET_NTOA() 函数则将整数形式的IPv4地址转换回点分十进制表示法
总结
ipv4直接存储为字符串 优点是易读、灵活 缺点占用更多的空间
ipv4转换为整数 优点节省空间、便于比较 缺点不易读、需要额外的运算