MySQL怎样存储IP地址
为什么要问如何存储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地址相关推荐
- Mysql数据库存储ip地址
很多时候我们数据库存储ip地址都是以字符串的形式的,毕竟那个ip地址点来点去的,其他类型都无法存储了,今天带来一个小知识,mysql中的inet_aton使用 从上图可以看到,使用这个函数可以把ip地 ...
- mysql中存储ip地址,将ip转换为整数存储
mysql中将ip转换为整数存储,可以节省空间和提高性能,但是不利于阅读.<msql高性能>中推荐将ip地址转换为整数,用一个无符号的32位的整数存储. select INET_ATON( ...
- mysql数据库ip地址_MySQL数据库存储IP地址的方法
为什么要问如何存储IP? 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中 ...
- MySQL如何有效的存储IP地址
文章目录 序言 工具类实现转换 数据库函数实现转换 一.IP地址应该怎么存 二.整数存储 IP 地址的查询性能实验 1.测试范围查询: 2.IP精确查询: 3.整理一下结果发现: 总结 首先就来阐明一 ...
- mysql存储ip地址_MySQL怎样存储IP地址
为什么要问如何存储IP 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不 ...
- 【mysql】MySQL存储IP地址
为什么要问如何存储IP 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中不 ...
- MySql存储IP地址(兼容ipv4和ipv6)
MySql存储IP地址(兼容ipv4和ipv6) 最近项目涉及到IP白名单的问题,需要设计表来存储IP地址,网上的方法针对IPV4和IPV6用什么类型存储也没有个统一的答案(都是抄来抄去....) 1 ...
- MySQL 存储 IP 地址
在 MySQL 中,如果是以字符串的形式存储 IP 地址,在正常格式下,最小长度为 7 个字符 (0.0.0.0),最大长度为 15 个 (255.255.255.255),我们通常会使用 varch ...
- 存储IP地址,到底用什么数据类型相对比较好
一. 介绍 在平常开发当中,肯定遇到过需要存储IP地址的场景,比如登录.访问.操作日志记录,方便起见直接使用字符串类型存储也不是不可以,但是在<高性能MySQL>中,建议存储IPv4地址时 ...
最新文章
- 生物科技发展与人类命运共同体塑造
- JS字符串类型转日期然后进行日期比较
- 程序员的800字作文
- crunch字典生成工具
- mockito单元测试示例_Mockito模拟示例
- 小强的HTML5移动开发之路(14)——Video标签详解
- SQLAlchemy介绍
- 分享几个下载豆瓣资源的chrome插件
- 9WinMap 映射
- Windows Server2019 安装教程
- GD32系列外部中断
- 大华相机RTSP获取视频方式
- 《物联网开发实战》05 系统实例:怎样设计一个简易物联网系统?(学习笔记)
- 中小卖家电商节恐惧症:你们剁手,我们割肉 2017-10-27 09:00 稿源:懂懂笔记 0条评论 撤稿纠错 “其实对一部分我们这样的中小卖家来说,造节就是煎熬。” 在某大型电商平台上拥有两家
- html 字体样式斜体,CSS font-style斜体字体倾斜体样式
- Spark Steaming管理kafka的offset
- 网站收录查询方法,网站收录减少的原因
- linux 之 mtd and mtdblock
- pytorch怎么下载?pytorch在哪里下载?
- 十大监控工具,值得一试