为什么要问如何存储IP

首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗?

其实做任何程序设计都要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的一个重要部分,所以巧存IP地址可以一定程度获得很大提升。

利用函数算法处理

在MySQL中没有直接提供IP类型字段,但如果有两个函数可以把IP与最大长度为10位数字类型互转,所以使用int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少空间。因为varchar是可变长形,需要多余的一个字节存储长度。另外int型在逻辑运算上要比varchar速度快。

IP转数字函数inet_aton()

我们转换下几个常用的IP地址

01 mysql> select inet_aton('255.255.255.255');
02 +------------------------------+
03 | inet_aton('255.255.255.255') |
04 +------------------------------+
05 |                   4294967295 |
06 +------------------------------+
07 1 row in set (0.00 sec)
08  
09 mysql> select inet_aton('192.168.1.1');   
10 +--------------------------+
11 | inet_aton('192.168.1.1') |
12 +--------------------------+
13 |               3232235777 |
14 +--------------------------+
15 1 row in set (0.00 sec)
16  
17 mysql> select inet_aton('10.10.10.10');
18 +--------------------------+
19 | inet_aton('10.10.10.10') |
20 +--------------------------+
21 |                168430090 |
22 +--------------------------+
23 1 row in set (0.00 sec)

所以IP的表字段可以设置为INT(10)就好,如果IP获取不到可以直接存0代表获取不到IP的意思

数字转IP函数inet_ntoa()

01 mysql> select inet_ntoa(4294967295);
02 +-----------------------+
03 | inet_ntoa(4294967295) |
04 +-----------------------+
05 | 255.255.255.255       |
06 +-----------------------+
07 1 row in set (0.00 sec)
08  
09 mysql> select inet_ntoa(3232235777);
10 +-----------------------+
11 | inet_ntoa(3232235777) |
12 +-----------------------+
13 | 192.168.1.1           |
14 +-----------------------+
15 1 row in set (0.00 sec)
16  
17 mysql> select inet_ntoa(168430090);
18 +----------------------+
19 | inet_ntoa(168430090) |
20 +----------------------+
21 | 10.10.10.10          |
22 +----------------------+
23 1 row in set (0.00 sec)
24  
25 mysql> select inet_ntoa(0);       
26 +--------------+
27 | inet_ntoa(0) |
28 +--------------+
29 | 0.0.0.0      |
30 +--------------+
31 1 row in set (0.00 sec)

注意,0转换为 0.0.0.0

整型字段的比较比字符串效率高很多,这也符合一项优化原则:字段类型定义使用最合适(最小),最简单的数据类型。
inet_aton()算法,其实借用了国际上对各国IP地址的区分中使用的ip number。
a.b.c.d 的ip number是:
a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方。

MySQL怎样存储IP地址相关推荐

  1. Mysql数据库存储ip地址

    很多时候我们数据库存储ip地址都是以字符串的形式的,毕竟那个ip地址点来点去的,其他类型都无法存储了,今天带来一个小知识,mysql中的inet_aton使用 从上图可以看到,使用这个函数可以把ip地 ...

  2. mysql中存储ip地址,将ip转换为整数存储

    mysql中将ip转换为整数存储,可以节省空间和提高性能,但是不利于阅读.<msql高性能>中推荐将ip地址转换为整数,用一个无符号的32位的整数存储. select INET_ATON( ...

  3. mysql数据库ip地址_MySQL数据库存储IP地址的方法

    为什么要问如何存储IP? 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中 ...

  4. MySQL如何有效的存储IP地址

    文章目录 序言 工具类实现转换 数据库函数实现转换 一.IP地址应该怎么存 二.整数存储 IP 地址的查询性能实验 1.测试范围查询: 2.IP精确查询: 3.整理一下结果发现: 总结 首先就来阐明一 ...

  5. mysql存储ip地址_MySQL怎样存储IP地址

    为什么要问如何存储IP 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不 ...

  6. 【mysql】MySQL存储IP地址

    为什么要问如何存储IP 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不 ...

  7. MySql存储IP地址(兼容ipv4和ipv6)

    MySql存储IP地址(兼容ipv4和ipv6) 最近项目涉及到IP白名单的问题,需要设计表来存储IP地址,网上的方法针对IPV4和IPV6用什么类型存储也没有个统一的答案(都是抄来抄去....) 1 ...

  8. MySQL 存储 IP 地址

    在 MySQL 中,如果是以字符串的形式存储 IP 地址,在正常格式下,最小长度为 7 个字符 (0.0.0.0),最大长度为 15 个 (255.255.255.255),我们通常会使用 varch ...

  9. 存储IP地址,到底用什么数据类型相对比较好

    一. 介绍 在平常开发当中,肯定遇到过需要存储IP地址的场景,比如登录.访问.操作日志记录,方便起见直接使用字符串类型存储也不是不可以,但是在<高性能MySQL>中,建议存储IPv4地址时 ...

最新文章

  1. 生物科技发展与人类命运共同体塑造
  2. JS字符串类型转日期然后进行日期比较
  3. 程序员的800字作文
  4. crunch字典生成工具
  5. mockito单元测试示例_Mockito模拟示例
  6. 小强的HTML5移动开发之路(14)——Video标签详解
  7. SQLAlchemy介绍
  8. 分享几个下载豆瓣资源的chrome插件
  9. 9WinMap 映射
  10. Windows Server2019 安装教程
  11. GD32系列外部中断
  12. 大华相机RTSP获取视频方式
  13. 《物联网开发实战》05 系统实例:怎样设计一个简易物联网系统?(学习笔记)
  14. 中小卖家电商节恐惧症:你们剁手,我们割肉 2017-10-27 09:00 稿源:懂懂笔记 0条评论 撤稿纠错 “其实对一部分我们这样的中小卖家来说,造节就是煎熬。” 在某大型电商平台上拥有两家
  15. html 字体样式斜体,CSS font-style斜体字体倾斜体样式
  16. Spark Steaming管理kafka的offset
  17. 网站收录查询方法,网站收录减少的原因
  18. linux 之 mtd and mtdblock
  19. pytorch怎么下载?pytorch在哪里下载?
  20. 十大监控工具,值得一试

热门文章

  1. vue 动态绑定 video src,不能正常播放问题
  2. Wampserver的安装与配置笔记
  3. 电子计算机应由,计算机
  4. 小熊的日记图文列表布局小程序模板
  5. Visual Studio 2008 SP1 和 net framework 3.5 新特性
  6. HTML5: 两个viewport的故事(第二部分)
  7. 视差滚动不适合网页的5个原因
  8. drupal7的目录结构及术语
  9. sklearn文档-第一次笔记
  10. SLAM大神总结(转载)