原文:https://www.jb51.net/article/29962.htm

当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_ntoa()函数,来存储IP地址效率很高,适用unsigned int 就可以满足需求,不需要使用bigint,只需要4个字节,节省存储空间,同时效率也高很多

mysql> create table jackbillow (ip int unsigned, name char(1)); 
Query OK, 0 rows affected (0.02 sec)

mysql> insert into jackbillow values(inet_aton('192.168.1.200'), 'A'), (inet_aton('200.100.30.241'), 'B'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0

mysql> insert into jackbillow values(inet_aton('24.89.35.27'), 'C'), (inet_aton('100.200.30.22'), 'D'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from jackbillow; 
+------------+------+ 
| ip | name | 
+------------+------+ 
| 3232235976 | A | 
| 3362004721 | B | 
| 408494875 | C | 
| 1690836502 | D | 
+------------+------+ 
4 rows in set (0.00 sec)

mysql> select * from jackbillow where ip = inet_aton('192.168.1.200'); 
+------------+------+ 
| ip | name | 
+------------+------+ 
| 3232235976 | A | 
+------------+------+ 
1 row in set (0.00 sec)

mysql> select inet_ntoa(ip) from jackbillow; 
+----------------+ 
| inet_ntoa(ip) | 
+----------------+ 
| 192.168.1.200 | 
| 200.100.30.241 | 
| 24.89.35.27 | 
| 100.200.30.22 | 
+----------------+ 
4 rows in set (0.00 sec)

当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_ntoa()函数,来存储IP地址效率很高,适用unsigned int 就可以满足需求,不需要使用bigint,只需要4个字节,节省存储空间,同时效率也高很多。

如果IP列有索引,可以使用下面方式查询:

mysql> select inet_aton('100.200.30.22'); 
+----------------------------+ 
| inet_aton('100.200.30.22') | 
+----------------------------+ 
| 1690836502 | 
+----------------------------+ 
1 row in set (0.00 sec)

mysql> select * from jackbillow where ip=1690836502; 
+------------+------+ 
| ip | name | 
+------------+------+ 
| 1690836502 | D | 
+------------+------+ 
1 row in set (0.00 sec)

mysql> select inet_ntoa(ip),name from jackbillow where ip=1690836502; 
+---------------+------+ 
| inet_ntoa(ip) | name | 
+---------------+------+ 
| 100.200.30.22 | D | 
+---------------+------+ 
1 row in set (0.00 sec)

对于LIKE操作,可以使用下面方式:

mysql> select inet_ntoa(ip) from jackbillow; 
+----------------+ 
| inet_ntoa(ip) | 
+----------------+ 
| 192.168.1.200 | 
| 200.100.30.241 | 
| 24.89.35.27 | 
| 100.200.30.22 | 
| 192.168.1.100 | 
| 192.168.1.20 | 
| 192.168.2.20 | 
+----------------+ 
7 rows in set (0.00 sec)

mysql> select inet_aton('192.168.1.0'); 
+--------------------------+ 
| inet_aton('192.168.1.0') | 
+--------------------------+ 
| 3232235776 | 
+--------------------------+ 
1 row in set (0.00 sec)

mysql> select inet_aton('192.168.1.255'); 
+----------------------------+ 
| inet_aton('192.168.1.255') | 
+----------------------------+ 
| 3232236031 | 
+----------------------------+ 
1 row in set (0.00 sec)

mysql> select inet_ntoa(ip) from jackbillow where ip between 3232235776 and 3232236031; 
+---------------+ 
| inet_ntoa(ip) | 
+---------------+ 
| 192.168.1.200 | 
| 192.168.1.100 | 
| 192.168.1.20 | 
+---------------+ 
3 rows in set (0.00 sec)

mysql> select inet_ntoa(ip) from jackbillow where ip between inet_aton('192.168.1.0') and inet_aton('192.168.1.255'); 
+---------------+ 
| inet_ntoa(ip) | 
+---------------+ 
| 192.168.1.200 | 
| 192.168.1.100 | 
| 192.168.1.20 | 
+---------------+ 
3 rows in set (0.00 sec)

利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法的更多相关文章

  1. mysql 使用inet_aton和inet_ntoa处理ip地址数据

    mysql 使用inet_aton和inet_ntoa处理ip地址数据 mysql提供了两个方法来处理ip地址 inet_aton 把ip转为无符号整型(4-8位) inet_ntoa 把整型的ip转 ...

  2. 【mysql】MySQL存储IP地址

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

  3. MySQL怎样存储IP地址

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

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

    前几天,阿淼的一个朋友去面试,他回来告诉我,面试官问他 IP 地址是怎么存在数据库的?他当时也没多想,直接就回答的存字符串啊(心想:这么简单的问题,怕不是看不起我吧) 前面这段权当看看,毕竟 IP地址 ...

  5. MySQL和PHP中以整型存储IP地址

    正文:将IP地址以整型存储 一般我们在数据库中会用到ip地址用来查记录的等等,而ip地址是分为四段的,一般是用varchar或char类型存储.但是其实有更好的存储方法就是以整型存储IP地址. 因为c ...

  6. MySQL怎样存储IP地址 IP转数字 互转

    MySQL怎样存储IP地址 - cn三少 - 博客园 https://www.cnblogs.com/cnsanshao/p/3326648.html

  7. 如何在数据库中存储IP地址

    最近改一个比较老的web系统,该系统是通过账号或者ip地址(白名单)验证限制访问权限的. 由于运营的时间比较长了,发现进入网站巨卡... 原因就是:之前的数据库(sqlserver)存储ip地址是用的 ...

  8. mysql 存储ip地址

    mysql提供了两个方法来处理ip地址: inet_aton 把ip转为无符号整型(4-8位) inet_ntoa 把整型的ip转为电地址 插入数据前,先用inet_aton把ip地址转为整型,可以节 ...

  9. MySQL存储IP地址操作

    数据库数据表创建语法: DROP TABLE IF EXISTS `admin`; CREATE TABLE IF NOT EXISTS `admin`( `adminid` INT UNSIGNED ...

随机推荐

  1. IEEE-754格式标准,float,

    float float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进 ...

  2. 在nginx环境下搭建https服务,代理到本地web项目

    安装过程略. 1.证书准备 本地调试,可以安装自签名证书,安装方法参考https本地自签名证书添加到信任证书访问 2.修改配置文件 将上面的配置文件拷贝到conf目录,添加或者修改节点如下 http{ ...

  3. 封装redis操作 php版本

    <?php namespace App\Service; use App\Service\BaseService; use Illuminate\Support\Facades\Redis; / ...

  4. Java并发编程核心概念一览

    作者博客地址 https://muggle.javaboy.org. 并行相关概念 同步和异步 同步和异步通常来形容一次方法的调用.同步方法一旦开始,调用者必须等到方法结束才能执行后续动作:异步方法则 ...

  5. Zipkin+Sleuth 链路追踪整合

    1.Zipkin 是一个开放源代码分布式的跟踪系统 它可以帮助收集服务的时间数据,以解决微服务架构中的延迟问题,包括数据的收集.存储.查找和展现 每个服务向zipkin报告计时数据,zipkin会根据 ...

  6. vs2015下C4819该文件包含不能在当前代码页(936)中表示的字符问题解决

    今天编译IfcOpenshell出现很多warning如下: C4819 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失 解决方案: 文件——& ...

  7. Dockerfile HEALTHCHECK健康检查

    Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command 2.HEALTHCHECK NODE 意思是禁止从父镜像继承的H ...

  8. dd命令的使用

    1.dd命令的使用 dd命令用于复制文件并对源文件的内容进行转换和格式化处理,在有需要的时候可以使用dd命令对物理磁盘进行操作,使用dd对磁盘操作时,最好使用块设备文件. (1)命令语法 dd (选项 ...

  9. Ubuntu下载源码并编译

    本文章将介绍如何在Ubunt下进行Linux源码下载,并进行简单的编译步骤. 1.下载linux源码 先查看对应的Ubuntu对应版本源码 $ sudo apt-cache search linux- ...

  10. Linux安装kafka2.3.1基于Scala2.12

    一,先从官网下载:http://kafka.apache.org/downloads 二,解压压缩包(虽然后缀是tgz,但和gz解压方式一样):然后mv kafka_2.12-2.3.1 /usr/l ...