首页 > 数据库技术 > 详细

关于IP在MySQL中的存储

时间:2015-11-13 14:34:40      阅读:311      评论:0      收藏:0      [点我收藏+]

对于很多新手而言,他们总会纠结,怎样才能更好的设计MySQL数据库呢;作为一个从菜鸟走过来的人,深有体会,刚开始我也不知道什么是外键、什么是事务处理、怎样合理的定义一个字段,说到字段,今天我就带领大家一起来学习PHP中的函数ip2long()的用法;

相信大家也能在百度中搜索到关于该函数的用法,而我却是在总结大家可能不知道的一些知识,好了,废话少说,让我们进入正题吧!

PHP手册中关于ip2long()函数的介绍:将一个IPV4的字符串互联网协议转换成数字格式,这里指的是IPV4,而不是IPV6!

很多程序员设计数据库表时都喜欢创建一个varchar(15)字段来存储IP的值, 一些高级工程师给出的建议是使用int类型,只需要4个字节,这样不仅能够节省空间,最重要的是查询比较快,对于少量数据是体现不出来的,如果将来有一天我们的数据越来越多时,这点小小的优化将会表现的非常重要了,作为一名PHP工程师要有一个良好的编程习惯,不要觉得项目小就不在乎;

那么ip2long函数就起到作用了,当你存储IP之前,使用ip2long(‘ip‘)转成int类型存储,读取的时候使用long2ip()就可以了;

下面一点是我在调试中做的总结,希望给读者朋友们带来便利

ipv4大家都知道是从0.0.0.0到255.255.255.255;然而使用ip2long函数转换后并不是我们想象中的0到4294967295,因为int类型最大值也只有2147483647;PHP考虑到这一点,int类型的取整范围是-2147483647到2147483647;所以0.0.0.0-127.255.255.255转换后为0到2147483647;128.0.0.0-255.255.255.255转换后为-2147483647到-1;

咦,你是不是发现一个很神奇的问题IP地址转换成int类型正好是int的取整范围,感兴趣的朋友可以去查阅一下为什么?这里我就不多讲了;实际开发中其实我们并不需要关心ip转换成int类型的值,存的时候ip2long,读的时候long2ip就可以了;

我们来思考一个问题:这是我在网上看到的一篇博文

ip2long(‘10.52.1.129‘);// 171180417

ip2long(‘10.052.1.129‘);//170525057

ip中有前导零导致的转换结果不一致,他说是bug,请问同学们,这是bug吗?如果这真是bug,PHP经历这么多版本,居然没有解决?聪明的同学立马会看懂,有前导零还是标准的IP吗?对不对?

关于IP在MySQL中的存储

原文:http://www.cnblogs.com/xiaozong/p/4961935.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!