数据库存储ip最佳方式

博客讨论了在MySQL中存储IPv4地址的不同方法,包括使用VARCHAR(15)和无符号整数。文章指出,使用无符号整数可以节省存储空间,但需要进行手动转换,且不便于直接阅读。示例代码展示了如何将IPv4地址转换为long类型和反向转换。
摘要由CSDN通过智能技术生成

参考:微信公众号

通常,在保存IPv4地址时,一个IPv4最小需要7个字符,最大需要15个字符,所以,使用VARCHAR(15)即可。MySQL在保存变长的字符串时,还需要额外的一个字节来保存此字符串的长度。而如果使用无符号整数来存储,只需要4个字节即可。另外还可以使用4个字段分别存储IPv4中的各部分,但是通常这不管是存储空间和查询效率应该都不是很高(可能有的场景适合使用这种方式存储)。

使用无符号整数来存储也有缺点:

  • 不便于阅读
  • 需要手动转换
public static void main(String[] args) {
    
    // 将字符串ip装换为long   select inet_aton('192.168.0.125');
    String ipStr = "192.168.0.125";
    String[] ip = ipStr.split("\\.");
    long ipLong = (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16)
            + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
    System.out.println("ipL = " + ipLong);
    
    // 将ip的lang值装换为字符串  select inet_ntoa(3232235645);
    long ipL = 3232235645L;
    StringBuilder ipS = new StringBuilder();
    ipS.append(ipLong >>> 24).append(".");
    ipS.append((ipLong >>> 16) & 0xFF).append(".");
    ipS.append((ipLong >>> 8) & 0xFF).append(".");
    ipS.append(ipLong & 0xFF);
    String s = ipS.toString();
    System.out.println("s = " + s);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值