当存储IPv4地址时,建议使用32 位的无符号整数(UNSIGNED INT)来存储,而不是使用字符串。
优点:
1、节省空间,不管是数据存储空间,还是索引存储空间
2、查询时效率更高,便于使用范围查询(Between...And..)
缺点:
1、需要手动转换,不便于阅读
# Mysql 提供的转换函数
SELECT INET_ATON('192.168.0.1') ipNum;
SELECT INET_NTOA('3232235521') ip;
Java 转换工具类
/**
* ip String 转成 long 类型数据
* @param ipStr
* @return
*/
public static long ip2Long(String ipStr) {
String[] ip = ipStr.split("\\.");
return (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16)
+ (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
}
/**
* IP Long 类型数据转换成 String
* @param ipLong
* @return
*/
public static String long2Ip(long ipLong) {
StringBuilder ip = new StringBuilder();
ip.append(ipLong >>> 24).append(".");
ip.append((ipLong >>> 16) & 0xFF).append(".");
ip.append((ipLong >>> 8) & 0xFF).append(".");
ip.append(ipLong & 0xFF);
return ip.toString();
}
public static void main(String[] args) {
System.out.println(ip2Long("192.168.0.1"));
System.out.println(long2Ip(3232235521L));
}