大多数公司的表结构都需要经过DBA进行审核,有时候你会看到存储IP地址采用varchar(15),这种方式都是传统的做法,这种方法需要占用15个字节,那么有更省空间的做法么?肯定是有的,那就是用int存储。如果采用int存储这里又有2种处理方式。

1. 利用MySQL函数进行处理。可以采用INET_ATON,INET_NTOA函数进行转换。

2. 利用开发语言的函数进行处理,以php进行举例。可以采用ip2long,long2ip函数进行转换。

上面2种方法得到的结果都是一致的。因为算法都是一样的。

下面进行函数用法的演示。首先看看用MySQL自己的函数如何玩。先把ip地址转换int。

mysql> SELECT INET_ATON('192.168.0.1');
+--------------------------+
| INET_ATON('192.168.0.1') |
+--------------------------+
|               3232235521 |
+--------------------------+
1 row in set (0.00 sec)mysql> 

然后把int类型转换为ip地址:

mysql> SELECT INET_NTOA(3232235521);
+-----------------------+
| INET_NTOA(3232235521) |
+-----------------------+
| 192.168.0.1           |
+-----------------------+
1 row in set (0.00 sec)mysql> 

下面看php函数的使用:

<?php
echo ip2long('192.168.0.1');
?>

php test.php
3232235521

可以看到结果是一样的,如果要把整形转换为ip地址,再使用php的long2ip()就行,这里就不再写了。
MySQL存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了。当然可以使用bigint,但是请记住,能抠门就要抠门。省一点是一点,哈哈。

PHP存入时:$ip = ip2long($ip);
MySQLl取出时:SELECT INET_ATON(ip) FROM table ...
PHP取出时,多一步:$ip = long2ip($ip);

那么以前就是varchar类型,那么如何转换呢?下面慢慢道来。

1. 把以前的varchar()数据转换为int型的SQL语句如下。

UPDATE t1 SET ip =  INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL ;

mysql> select * from t1;
+------+-------------+
| id   | ip          |
+------+-------------+
|    1 | 192.168.0.1 |
|    2 | 192.168.0.2 |
+------+-------------+
2 rows in set (0.00 sec)mysql> UPDATE t1 SET ip =  INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL ;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0mysql> select * from t1;
+------+------------+
| id   | ip         |
+------+------------+
|    1 | 3232235521 |
|    2 | 3232235522 |
+------+------------+
2 rows in set (0.00 sec)

2. 把字段改为INT类型。

mysql> show create table t1\G
*************************** 1. row ***************************Table: t1
Create Table: CREATE TABLE `t1` (`id` int(11) DEFAULT NULL,`ip` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ALTER TABLE `t1` modify ip INT UNSIGNED NOT NULL;

3. 程序代码改动。

总结:

字段类型用合适的,够用就行,能省则省,在数据量上去以后,10个字节和5个字节相差的数据量会让你吃惊。

转载于:https://www.cnblogs.com/gomysql/p/4595621.html

IP地址在数据库里面的存储方式相关推荐

  1. 论IP地址在数据库中应该用何种形式存储

    这引发我的思考--缘起 当设计一个数据表时,考虑使用何种列的数据类型对性能有比较大的影响,如存储空间.查询开销等.甚至还影响到一些操作,如ip地址以字符串的形式存储在数据库中,就不可以直接比较大小.还 ...

  2. mysql 怎么设置ip地址_Mysql如何设置用户指定ip地址操作数据库

    Mysql设置用户指定ip地址操作数据库的方法: 语法: grant priv_type on mysql.user to 'user'@'host' identified by 'password' ...

  3. 如何使用IP地址链接数据库

    使用IP地址链接数据库,不论是外网IP还是内网IP,必须开通SQLserver服务的TCP/IP协议和客户端的TCP/IP协议 因此解决这个问题需要三个步骤: 1.右键服务器电脑中的管理,找到如下中的 ...

  4. mysql 怎么设置ip地址_Mysql设置用户指定ip地址操作数据库的方法

    Mysql设置用户指定ip地址操作数据库的方法 发布时间:2020-09-29 15:00:47 来源:亿速云 阅读:65 作者:小新 这篇文章主要介绍Mysql设置用户指定ip地址操作数据库的方法, ...

  5. 用户密码在后台数据库中加密存储方式

    常见的用户密码在后台数据库中加密存储方式 如何安全的存储用户密码 常见登录密码加密方式 JavaScript逆向实战:admin加密成WaQ7xbhc9TefbwK是什么加密算法?逆向思维考验.详细流 ...

  6. mysql数据库ip地址_MySQL数据库存储IP地址的方法

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

  7. oracle数据库存储ip地址,oracle – 以十进制形式存储的IP地址 – PL / SQL以虚线四边形显示...

    这是您需要的功能: create or replace function inttoip(ip_address integer) return varchar2 deterministic is be ...

  8. MySQL基础|设置登录用户权限,访问ip地址---防止数据库误删,详细版

    对于公司的开发团队来说,需要协同维护同一个数据表,但是要防止新人因为代码不熟悉或者什么其他原因,把整个数据表给删除掉. 毕竟对于公司来说,一个程序是可以复刻的,但是极具商业价值的数据表却是长时间才能积 ...

  9. 常见的用户密码在后台数据库中加密存储方式

    转载自:https://blog.csdn.net/ctrip_tech/article/details/80125741 一.用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什 ...

最新文章

  1. PyTorch 图像分类
  2. PL/SQL Developer使用技巧、快捷键
  3. python 抽象类分析
  4. C#高效编程话题集1(每期10话题)
  5. [css] 给一个图片设置透明有哪些方式呢?
  6. 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题
  7. Python:程序生成Windows可执行文件/不显示命令执行窗口/无法生成exe报错TypeError: an integer is required (got type bytes)解决方法
  8. tftp拷贝linux文件夹,CentOS下使用TFTP向目标板传送文件
  9. Android平板怎么截屏,华为平板怎么截屏(华为平板快速截图)
  10. H5网站模板——前台和后台
  11. php网站系统说明,国外CMS系统介绍(总结)
  12. 【第2篇】人工智能(AI)语音测试原理和实践
  13. html css二级下拉菜单,下拉导航 - 两级菜单(CSS/HTML)
  14. 珍大户《认知世界的经济学》学习笔记 -- 第17课 影响消费者的因素,更新时间2021年03月18日21:53:57
  15. python自然语言处理学习笔记一
  16. C# 扫描并读取图片中的文字(.NET Core)
  17. Unity3d场景渲染出图
  18. 用python提取发票扫描件常用的10多个发票信息保存到excel表
  19. rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中
  20. 关于个人电脑C盘清理的一些小整合

热门文章

  1. 省公务员县公安局,县编办,县政府办,县保密局,这几岗位怎么选?
  2. 你想过没有,学校从来没教过你怎么赚钱
  3. 我每天都是和有钱人打交道
  4. 如何在几天时间内快速理解一个陌生行业?
  5. 那些很重要,但是不常用的技术,websocket
  6. MySql基础汇总-DDL DML DQL DCL,存储过程,事务,触发器,函数等
  7. 枚举编写单例是可以保证在多线程中的安全性
  8. async与await详解
  9. mongodb的安装和sql操作
  10. 被request.getLocalAddr()苦闷了很久