【mysql】IP地址整数int和varchar的转换
mysql中IP地址的存储
IP:如192.168.12.145,在存储时,若是采用varchar进行存储,存在两个主要缺点:
- 存储空间占用较大;
- 查询检索较慢;
解决方式:
- 存储时:将字符串类型的IP转换为整型进行存储;
- 查询时:将整型的IP转换为字符串;
Mysql自带的IP转换语句
- inet_aton:将ip地址转换成数字型
- inet_ntoa:将数字型转换成ip地址
示例1:
//使用inet_aton函数,将字符串IP转换为整型;
mysql> select inet_aton('73.115.134.73') as ip;
+------------+
| ip |
+------------+
| 1232307785 |
+------------+
//使用inet_ntoa函数,将整型IP转换为字符串;
mysql> select inet_ntoa(1232307785) as ip;
+---------------+
| ip |
+---------------+
| 73.115.134.73 |
+---------------+
示例2:
//不进行转换,查询结果为整型
mysql> select src_ip from natTable limit 5;
+------------+
| src_ip |
+------------+
| 1232307785 |
| 1232285337 |
| 1232323310 |
| 1232325234 |
| 1232326662 |
+------------+
//通过inet_ntoa函数进行转换,查询结果为IP格式的字符串
mysql> select inet_ntoa(src_ip) from natTable limit 5;
+-------------------+
| inet_ntoa(src_ip) |
+-------------------+
| 73.115.134.73 |
| 73.115.46.153 |
| 73.115.194.238 |
| 73.115.202.114 |
| 73.115.208.6 |
+-------------------+
自定义转换函数:
如:将1232307785转换为73.116.134.73
DELIMITER $$
CREATE FUNCTION natAndImDbTest11.ipBigIntToString (
ip bigint
)
RETURNS CHAR(15)
BEGIN
DECLARE o1 INT;
DECLARE o2 INT;
DECLARE o3 INT;
DECLARE o4 INT;
DECLARE ip_new_varchar VARCHAR(15);
IF (ip > 4294967295) then
RETURN '255.255.255.255';
END if;
IF (ip <= 0) then
RETURN '0.0.0.0' ;
END if;
SET o1 = ip / 16777216;
SET ip = ip % 16777216 ;
SET o2 = ip / 65536 ;
SET ip = ip % 65536 ;
SET o3 = ip / 256 ;
SET ip = ip % 256 ;
SET o4 = ip ;
SET ip_new_varchar = concat( cast(o1 as char(3)),'.',cast(o2 as char(3)),'.',cast(o3 as char(3)),'.',cast(o4 as char(3)));
RETURN (ip_new_varchar);
END;
$$
DELIMITER ;
测试:
use natAndImDbTest11;
mysql> select ipBigIntToString(1232307785);
+------------------------------+
| ipBigIntToString(1232307785) |
+------------------------------+
| 73.116.134.73 |
+------------------------------+
其他说明
删除自定义方法
drop FUNCTION if exists natAndImDbTest11.ipBigIntToString;
自定义方法的局限
本打算使用 ipBigIntToString 代替 inet_ntoa 进行查询,发现不行:
mysql> select ipBigIntToString(src_ip) from natTable limit 5;
ERROR 5 (HY000): The query includes syntax that is not supported by the Infobright Optimizer. Either restructure the query with supported syntax, or enable the MySQL Query Path in the brighthouse.ini file to execute the query with reduced performance.
mysql>
可能有其他方式可以使用ipBigIntToString替代inet_ntoa,但是目前自己未成功;
【mysql】IP地址整数int和varchar的转换的更多相关文章
- IP地址转换为Int
1.转换类 import com.google.common.base.Strings; import java.security.InvalidParameterException; import ...
- IP地址和int互转
/** * @author: yqq * @date: 2019/5/8 * @description: ip地址与int之间互换 * https://mp.weixin.qq.com/s?__biz ...
- PHP中IP地址与整型数字互相转换详解
这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...
- IP地址在mysql的存储(IP地址和int的转换)
PHP echo ip2long('192.168.1.38'); 输出:3232235814 MYSQL SELECT INET_ATON('192.168.1.38'); 输出:323223581 ...
- IP地址的存储和使用
ip地址使用int类型存储,用INET_NTOA()和INET_ATON()转换 mysql'),inet_aton('127.0.0.1'); +-------------------------+ ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- 批处理快速更改ip地址
在各种网络中切换,windows更换ip地址步骤: 进入控制面板--网络和internet--网络和共享中心--理性适配器设置--然后找到网卡--进入属性--然后internet 协议--更改ip信 ...
- C#根据IP地址和子网掩码计算广播地址
using System.Net; /// <summary> /// 获得广播地址 /// </summary> /// <param name="ipAdd ...
- C#获取局域网中的所有正在使用的IP地址
方法不是很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
随机推荐
- 利用scrapy下载图片保存到本地
1.先声明一下,起始位置已经是将所有的图片链接都能到pipelines.py中 2.创建一个类,继承于ImagesPipeline,因此也就需要导入ImagesPipeline from scrapy ...
- Beta周第7次Scrum会议(11/16)【王者荣耀交流协会】
一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/16 17:03~17:17,总计14min. ...
- Django--路由控制 ——URL反向解析
Django--路由控制 本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Djan ...
- Java基础三(Scanner键盘输入、Random随机数、流程控制语句)
1.引用类型变量的创建及使用2.流程控制语句之选择语句3.流程控制语句之循环语句4.循环高级 ###01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scanner类是属于 ...
- MySQL 5.7--多源复制(非GTID模式)
==================================================== 在MYSQL5.7版本中引入多源复制,一个从库允许复制多个主库的数据,每个主库被配置为一个单独 ...
- Scala之偏函数Partial Function
https://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起在Scala里,我们可以使用case语句来创建一个匿 ...
- Writing Custom Providers
转自:https://www.terraform.io/docs/extend/writing-custom-providers.html 很详细,做为一个记录 In Terraform, a Pro ...
- ipfs cluster 模式部署使用(docker-compose 环境运行)
ipfs 点对点的分布式文件系统,官方提供了集群模式运行的docker 镜像,以及docker-compose 文件 所以测试下 环境准备 docker-compose version: '3.4 ...
- DevExpress控件使用方法:第一篇 gridControl详解
GridControl (1)层次设计器 有五种视图模式,banded gridview多行表头,数据还是一行一组,最靠近数据的表头与数据一一对应:advanced banded gridview多行 ...
- 如何高效的使用 Git---转
Git 工作流 当有多个开发者同时涉及到一个项目时那么就非常有必要正确使用 Git 工作流. 这里我将介绍一种工作流,它在一个多人大型项目中将非常有用. 前言 突然有一天,你成为了一个项目的技术 Le ...