MySQL中应该怎样存储IP地址

为什么要问如何存储IP

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

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

利用函数算法处理

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

IP转数字函数inet_aton()

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

mysql> select inet_aton(‘255.255.255.255‘);

+------------------------------+

| inet_aton(‘255.255.255.255‘) |

+------------------------------+

|                   4294967295 |

+------------------------------+

1 row in set (0.00 sec)

mysql> select inet_aton(‘192.168.1.1‘);   

+--------------------------+

| inet_aton(‘192.168.1.1‘) |

+--------------------------+

|               3232235777 |

+--------------------------+

1 row in set (0.00 sec)

mysql> select inet_aton(‘10.10.10.10‘);

+--------------------------+

| inet_aton(‘10.10.10.10‘) |

+--------------------------+

|                168430090 |

+--------------------------+

1 row in set (0.00 sec)

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

数字转IP函数inet_ntoa()


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

mysql> select inet_ntoa(4294967295);

+-----------------------+

| inet_ntoa(4294967295) |

+-----------------------+

| 255.255.255.255       |

+-----------------------+

1 row in set (0.00 sec)

mysql> select inet_ntoa(3232235777);

+-----------------------+

| inet_ntoa(3232235777) |

+-----------------------+

| 192.168.1.1           |

+-----------------------+

1 row in set (0.00 sec)

mysql> select inet_ntoa(168430090);

+----------------------+

| inet_ntoa(168430090) |

+----------------------+

| 10.10.10.10          |

+----------------------+

1 row in set (0.00 sec)

mysql> select inet_ntoa(0);       

+--------------+

| inet_ntoa(0) |

+--------------+

| 0.0.0.0      |

+--------------+

1 row in set (0.00 sec)

注意,0转换为 0.0.0.0

from:http://www.qttc.net/201208193.html

时间: 2024-11-06 03:56:15

MySQL中应该怎样存储IP地址的相关文章

MySQL怎样存储IP地址

这两天面试,借贷宝面试官有问到你之前的项目是如何存储ip地址的,我的回答是,存储为varchar字符串类型(事实上我之前参与的项目中的确是采用varchar类型来存储的,但现在想想,当时的场景也仅仅是记录用户操作的地址,也没什么太多用途). 然后,面试官又问我,那你如何查找出A类IP地址的内容,这个时候我就懵了,因为我根本不知道IP地址还分类别,只知道基本格式是从0.0.0.0 ~ 255.255.255 所以,面试也是一种知识的学习,只可惜过程太痛苦,年轻的时候多学点总不是坏处,后悔当初在公司

利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享

当前很多应用都适用字符串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> inser

MySQL中常用的存储引擎(MyISAM 和InnoDB)

 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用存储引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能.现在许多的数据库管理系统都支持多种不同的存储引擎.MySQL的核心就是存储引擎. 使用 SHOW ENGINES; 命令查看MySQL支持的存储引擎,  Support 列表示某种引擎是否可以使用,YES表示可以,NO表示不可以,DEFAULT表示当前默认存储引擎. mysql> SH

检测局域网中未使用的IP地址

临时检测局域网中未使用的IP地址 #!/bin/bash echo "检测局域网中未使用的IP地址2015" echo ""     processbar() {         local current=$1; local total=$2;         local maxlen=80; local barlen=66; local perclen=14;         local format="%-${barlen}s%$((maxlen-b

MySQL存储IP地址操作

数据库数据表创建语法: DROP TABLE IF EXISTS `admin`; CREATE TABLE IF NOT EXISTS `admin`( `adminid` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `adminuser` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '管理员账号', `adminpass` CHAR(32) NOT NULL DEFAULT '' COMMENT

[Leetcode] restore ip address 存储IP地址

Given a string containing only digits, restore it by returning all possible valid IP address combinations. For example:Given"25525511135", return["255.255.11.135", "255.255.111.35"]. (Order does not matter) 题意:给定一由纯数字组成的字符串,以

【3.3】mysql中的Federated存储引擎,远程表,相当于sql server的linked server

MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件. 但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中(这一点很重要). 通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能. 1.使用show engines 命令查看数据库是否已支持FED

C#自动选择出系统中最合适的IP地址

写这个是因为很长时间以来,碰到过很多次这个问题,但都没当回事,这次又碰到了这个老问题,无奈百度了一圈儿未果,身边又没有大牛可以请教,就自己先“总结”了一套方法,一来给自己记录,二来如果碰巧能有朋友看到并为他解决了同样的困扰我将感到很爽. 起因:凡是网络程序,Coder似乎不可避免要碰到,你的代码如何在不同的机器上挑选出最合适的那个IP来通讯,因为如果打开一个应用程序让用户来选择用哪个IP地址和端口来通讯似乎就代表着这是个多么低端的程序,多么低能的程序员,所以一定要自动选择,用户 0 感知,就像伟

如何使用确定对方已经阅读你发送的邮件并从对方邮件中确定对方的ip地址

好多大学的选修课都是按照老师的要求把作业发送到邮箱中,但是好多同学发送了作业or结业论文后不知道老师是否已经接收到.可以使用以下的方式来确定老师是否已经阅读邮件. 第一步:打开邮箱找到"已发送" 第二步:双击你发送的邮件,看到最上方的选项 点击撤回,如果对方未阅读,则可以撤回,否者无法撤回.但是超过15天的则无法撤回.所述方式比较被动,下面介绍如何在发送前设置: 第一步:点击到写信的页面: 在最下方有向下的小型双箭头:点击后如下展示: 把需要回执勾选,则对方打开文件后就会显示对方需要你