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层执行,所有有下列的互转的工具类。

    1. public class IPUtils {
    2. /**
    3. * 把字符串IP转换成long
    4. *
    5. * @param ipStr 字符串IP
    6. * @return IP对应的long值
    7. */
    8. public static long ipToLong(String ipStr) {
    9. String[] ip = ipStr.split("\\.");
    10. return (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16)
    11. + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
    12. }
    13. /**
    14. * 把IP的long值转换成字符串
    15. *
    16. * @param ipLong IP的long值
    17. * @return long值对应的字符串
    18. */
    19. public static String longToIp(long ipLong) {
    20. StringBuilder ip = new StringBuilder();
    21. ip.append(ipLong >>> 24).append(".");
    22. ip.append((ipLong >>> 16) & 0xFF).append(".");
    23. ip.append((ipLong >>> 8) & 0xFF).append(".");
    24. ip.append(ipLong & 0xFF);
    25. return ip.toString();
    26. }
    27. }