php mysql ip地址转换

9 篇文章 0 订阅

mysql中经常需要ip地址字段,如何设计字段才能称得上是品学兼优的好设计?下面分析几种设计模式

方案1:varchar(15)-varchar(255)

大部分新手只要是字符串字段,不管什么类型,全部varchar(255)。有些考虑深一步用varchar(15),其实15跟255在这里没有区别,因为ip地址是15个字符,mysql实际保存时一定会先存15个字符,后面还会跟一个长度字符。所以就算设置为varchar(255),在存储时并不会比varchar(15)消耗多。

ps:实际消耗16字节


方案2:char(15)

这种方式相比上述有一点进步,实际消耗15字节


方案3:int(10) unsigned

此方案是实际使用中效率最高的,消耗4字节,保存和提取后需要计算才能使用。缩小保存的字节数不但节省空间,更利于搜索和范围查找。

转换规则:


下面是方案3用到的一些转换函数

php:

//php原生方法
//转换成无符号数,否则可能为负数
echo sprintf("%u",ip2long("192.168.0.1"));
echo long2ip(3232235521);

//php代码实现,ip中每个段乘以256的n次方,n为端数
$ip_arr = explode(".",$ip);  
$ip_decimal = 0; 
foreach($ip_arr as $i=>$s){   
    $ip_decimal += $s*pow(256,3-$i);
}

mysql:

select inet_aton("192.168.0.1");
select inet_ntoa(3232235521);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值