为什么要问如何存储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. MIT发布白皮书:美国欲重返世界半导体霸主!
  2. C程序设计的抽象思维-递归过程-砝码称重
  3. Spring Boot+Docker微服务分布式服务架构设计和部署案例
  4. linux下c md5函数
  5. Python的__str__()方法
  6. vscode如何找letax模板_一直努力却找不到变美思路?韩国新一代「整容模板」,教你如何提高美商、科学变美!...
  7. 使用保险丝结构管理MQ和ESB的大型部署,第I部分
  8. Addition Chains(信息学奥赛一本通-T1443)
  9. python 日志 logging模块(详细解析)
  10. 对抗神经网络(python-一维数据)
  11. java事务_Java 事务详解
  12. 老人拿家谱自称傅友德后代,学者:朱元璋诛九族却放过了六岁小孩
  13. 大小写字母格式(26个大小写字母格式表)
  14. Invalid configuration object. Webpack hch the API schema. - configuration has an unknown property
  15. QT - 图像处理 ( 1 ) - QImage像素级操作 - (转灰度、亮度、暖色、冷色、饱和度、模糊、锐化、金属效果 )
  16. SpringBoot整合使用XXL-JOB
  17. vue项目中实现价格被横线划掉,折扣价效果
  18. 基于51单片机的智能花盆测控(温湿度、光照)【仿真资料-126】
  19. 仰望流年纯白世界那抹城光(二)
  20. dubbo核心源码流程分析

热门文章

  1. 织梦响应式鲜花绿植花艺类网站模板(自适应手机端)
  2. 围观 Joomla, Wordpress 和 Drupal
  3. magento 获取 pages/Static Block 内容 Get Pages/Static Block in Magento
  4. iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组)
  5. Flex 中 12 个简单实用的小技巧
  6. K均值聚类关于初始聚类中心的探讨
  7. 搜索——素数环(hdu1016)
  8. zabbix3.4.4 监控系统安装部署
  9. 【今日CS 视觉论文速览】Fri, 1 Feb 2019
  10. 【C++面向对象】类的大小以及虚继承