作为一名开发人员,当你在使用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,切换数据库然后授权,具体代码详情大家参考下本
本文实例讲述了MySQL存储过程的异常处理方法。分享给大家供大家参考。具体如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE myProc -> (p_first_name VARCHAR(30), -> p_last_name VARCHAR(30)...
最新的IP地址库,MYSQL5版,有GBK和UTF8两个库。
在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少空间。因为varchar是可变长形,需要多余的一个...
mysql查询判断是否为ip地址
在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少看空间。因为varchar是可变长形,需要多余的一...
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...
IP地址离线查询数据库(MySQL版)版本1,单条记录描述形式如下: 1 0.0.0.0 0.255.255.255 IANA CZ88.NET 该版本不包含INET_ATOI后的转化版本
mysql经典教程+mysql存储过程讲解 重点讲解Mysql的存储过程,触发器,游标的使用 对mysql不太熟的朋友可以好好学习。。。
MySQL存储过程学习 MySQL存储过程 MySQL存储过程
ip地址表_2016(导入MySQL生成ip表即可) 包含所有IPV4段,归属地
mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页
ip地址库mysql完整版,地址446660个
打造Mysql最新版的IP地址数据库-将纯真IP数据库导入Mysql 1.到纯真网络下载最新的QQ IP数据库并安装。 2.运行“纯真IP地址数据库”,点击“解压”按钮,可以把数据库保存为文本格式,输入文件名保存:ip.txt。(当然...
c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等
MySql 分页 存储过程 MySql 分页 存储过程 MySql 分页 存储过程
最新最全的Ip地址mysql数据库,附加使用说明文档,可用于查询Ip地址所在国家和城市
tel&ip.sql文件,Mysql版本的IP地址库和手机归属地址库,使用时直接导入sql文件即可!