MySql存储IP地址建议使用32位无符号整数(UNSIGNED INT)来存储而不是采用字符串,MySql对于存储IP地址提供了专门的函数:
IPV4
字符串转整数:inet_aton(‘192.168.0.1’) //3232235521
整数转字符串:inet_ntoa(3232235521) //192.168.0.1
IPV6
字符串转整数:inet6_aton(‘192.168.0.1……’)
整数转字符串:inet6_ntoa(3232235521……)
虽然在数据库端提供了函数,当时为了节省数据库压力,一般将转换操作放在Services层执行,所有有下列的互转的工具类。
public class IPUtils {/*** 把字符串IP转换成long** @param ipStr 字符串IP* @return IP对应的long值*/public static long ipToLong(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值转换成字符串** @param ipLong IP的long值* @return long值对应的字符串*/public static String longToIp(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();}}
