首页 / MYSQL / 在mysql中用int类型存储IP
在mysql中用int类型存储IP
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在mysql中用int类型存储IP,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1459字,纯文字阅读大概需要3分钟。
内容图文
![在mysql中用int类型存储IP](/upload/InfoBanner/zyjiaocheng/557/60d62938694a4ebdb325f426f01fcfae.jpg)
这篇文章没什么技术含量, 主要介绍两个mysql函数, INET_ATON() 将IP转为十进制数字, INET_NTOA()将数字转换为IP。 先来看IP的结构, 127.0.0.1 ,学计算机的对2的N次方比较敏感,一看就猜到是由 4个8位的二进制数字组成, 对, 就是这样!也就是说IP转
这篇文章没什么技术含量, 主要介绍两个mysql函数, INET_ATON() 将IP转为十进制数字, INET_NTOA()将数字转换为IP。
先来看IP的结构, 127.0.0.1 ,学计算机的对2的N次方比较敏感,一看就猜到是由 4个8位的二进制数字组成, 对, 就是这样!也就是说IP转换成二进制可以这样:
select concat(bin(127),lpad(bin(0),8,0),lpad(bin(0),8,0),lpad(bin(1),8,0));
把每一位的前边补0, 然后拼接起来,得到这样的结果: 1111111000000000000000000000001
系统的INET_ATON()函数也是这么算的,不信可以对比一下结果:
select bin(inet_aton('127.0.0.1'));
得到的结果也是这样: 1111111000000000000000000000001
所以得出结论: INET_ATON() 就是把IP的每一段转为二进制拼接起来,然后将这个32位的二进制数字转为10进制
示例:
select INET_ATON('127.0.0.1'); --转为数字 select INET_NTOA(2130706433); --转为IP
为什么这么存储呢?
有人说节省空间, 也对, 不过比较蛋疼, 现在的硬盘那么便宜在乎这点空间?
更为合理的解释是, 方便查询, 比如要查某一网段的所有IP就可以 :
select * from table where ip between inet_aton('192.168.0.1') and inet_aton('192.168.0.255');
声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权
转载请注明来源:小景的博客
本文链接地址:http://www.phpv5.com/blog/archives/313/
内容总结
以上是互联网集市为您收集整理的在mysql中用int类型存储IP全部内容,希望文章能够帮你解决在mysql中用int类型存储IP所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。