IP的存放
在MySQL中,IP如果存放为varchar类型,一般需要46个字节(15*3+1),但是如果存放为无符号整形,只需要4个字节,相比之下,存放为无符号整形可以节省更多的存储空间。
Java代码
string转long
public static long stringToLong(String ip){
return Optional.ofNullable(ip.split("\\."))
.map(ips -> (Long.parseLong(ips[0]) << 24) + (Long.parseLong(ips[1]) << 16) + (Long.parseLong(ips[2]) << 8) + (Long.parseLong(ips[3])))
.orElse(0L);
}
long转string
public static String longToString(Long ip){
StringBuffer sb = new StringBuffer();
IntStream.range(0,4).forEach(i -> sb.append((ip >> 8 * (3 - i)) & 0xFF).append("."));
return sb.substring(0, sb.length() - 1);
}
数据库
string转long
select INET_ATON('192.168.0.1');//3232235521
long转string
select INET_NTOA(3232235521);//192.168.0.1
存储
ip 存放数据库,可以用ip
int(11) UNSIGNED,无符号int类型