php mysql ip地址转换

来源:互联网 发布:usb编程案例 编辑:程序博客网 时间:2024/06/18 16:43

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);

1 0