`
javis163
  • 浏览: 44159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql存储IP地址省空间的方法

阅读更多

作为一名开发人员,当你在使用mysql来做为你的存储数据库,肯定都会考虑用最合适的字段类型来创建数据库表吧。

可是假如你其中一个语句这么写 ip varchar(15) not null default '' COMMENT '用户IP地址', 

你有没考虑过,其实,有更省空间的方式来存储用户的IP地址。(这个虽然是变长的,但对于大部分中国IP来说,基本都在10字节以上吧)。

 

其实,mysql是有专门的字段和函数来存取用户的IP地址的,那就是 int unsigned.你没有看错,就是无符合int型

 

你可以在mysql中:

SELECT INET_ATON('192.168.23.4');

得到这个IP的值为:3232241412

你也可以在mysql中:

SELECT INET_NTOA(3232241412);

得到这个值对应的IP是:192.168.23.4

 

因为他们都遵循一个转换算法:

A*256*256*256+B*256*256+C*256+D的算法

 

下面提供一个粗略的将IP地址转换为long的JAVA方法:

 

public static long ipToLong(String strIp) throws Exception{

        long[] ip = new long[4];

        //先找到IP地址字符串中.的位置

        int position1 = strIp.indexOf(".");

        int position2 = strIp.indexOf(".", position1 + 1);

        int position3 = strIp.indexOf(".", position2 + 1);

        //将每个.之间的字符串转换成整型

        ip[0] = Long.parseLong(strIp.substring(0, position1));

        ip[1] = Long.parseLong(strIp.substring(position1+1, position2));

        ip[2] = Long.parseLong(strIp.substring(position2+1, position3));

        ip[3] = Long.parseLong(strIp.substring(position3+1));

        return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];

}

 

 

再提供一个粗略的将long转换为IP字符串的JAVA方法:

 

public static String longToIP(long longIp){

        StringBuffer sb = new StringBuffer("");

        //直接右移24位

        sb.append(String.valueOf((longIp >>> 24)));

        sb.append(".");

        //将高8位置0,然后右移16位

        sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));

        sb.append(".");

        //将高16位置0,然后右移8位

        sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));

        sb.append(".");

        //将高24位置0

        sb.append(String.valueOf((longIp & 0x000000FF)));

        return sb.toString();

}

 

 

分享到:
评论

相关推荐

    MySql通过ip地址进行访问的方法

    主要介绍了MySql通过ip地址进行访问的方法,首先要登录mysql,切换数据库然后授权,具体代码详情大家参考下本

    MySQL存储过程的异常处理方法

    本文实例讲述了MySQL存储过程的异常处理方法。分享给大家供大家参考。具体如下: mysql&gt; mysql&gt; delimiter $$ mysql&gt; mysql&gt; CREATE PROCEDURE myProc -&gt; (p_first_name VARCHAR(30), -&gt; p_last_name VARCHAR(30)...

    MYSQL最新IP地址库(全国+全球)

    最新的IP地址库,MYSQL5版,有GBK和UTF8两个库。

    MySQL存储IP地址的方法

    在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少空间。因为varchar是可变长形,需要多余的一个...

    mysql查询判断是否为ip地址,自创

    mysql查询判断是否为ip地址

    MySQL中应该怎样存储IP地址

     在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少看空间。因为varchar是可变长形,需要多余的一...

    mysql存储过程之返回多个值的方法示例

    本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...

    Mysql存储过程常用语句模板

    Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...

    IP地址离线查询数据库(MySQL版)

    IP地址离线查询数据库(MySQL版)版本1,单条记录描述形式如下: 1 0.0.0.0 0.255.255.255 IANA CZ88.NET 该版本不包含INET_ATOI后的转化版本

    mysql经典教程+mysql存储过程讲解

    mysql经典教程+mysql存储过程讲解 重点讲解Mysql的存储过程,触发器,游标的使用 对mysql不太熟的朋友可以好好学习。。。

    MySQL存储过程学习

    MySQL存储过程学习 MySQL存储过程 MySQL存储过程

    ip地址表_2016(导入MySQL生成ip表即可)

    ip地址表_2016(导入MySQL生成ip表即可) 包含所有IPV4段,归属地

    mysql存储过程实现分页

    mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页

    IP地址库mysql版

    ip地址库mysql完整版,地址446660个

    打造Mysql最新版的IP地址数据库-将纯真IP数据库导入Mysql

    打造Mysql最新版的IP地址数据库-将纯真IP数据库导入Mysql 1.到纯真网络下载最新的QQ IP数据库并安装。 2.运行“纯真IP地址数据库”,点击“解压”按钮,可以把数据库保存为文本格式,输入文件名保存:ip.txt。(当然...

    c++实现调mysql存储过程

    c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等

    MySql 分页存储过程以及代码调用

    MySql 分页 存储过程 MySql 分页 存储过程 MySql 分页 存储过程

    最全ip地址MYSQL数据库

    最新最全的Ip地址mysql数据库,附加使用说明文档,可用于查询Ip地址所在国家和城市

Global site tag (gtag.js) - Google Analytics