IP地址在数据库里面的存储方式
大多数公司的表结构都需要经过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地址在数据库里面的存储方式相关推荐
- 论IP地址在数据库中应该用何种形式存储
这引发我的思考--缘起 当设计一个数据表时,考虑使用何种列的数据类型对性能有比较大的影响,如存储空间.查询开销等.甚至还影响到一些操作,如ip地址以字符串的形式存储在数据库中,就不可以直接比较大小.还 ...
- mysql 怎么设置ip地址_Mysql如何设置用户指定ip地址操作数据库
Mysql设置用户指定ip地址操作数据库的方法: 语法: grant priv_type on mysql.user to 'user'@'host' identified by 'password' ...
- 如何使用IP地址链接数据库
使用IP地址链接数据库,不论是外网IP还是内网IP,必须开通SQLserver服务的TCP/IP协议和客户端的TCP/IP协议 因此解决这个问题需要三个步骤: 1.右键服务器电脑中的管理,找到如下中的 ...
- mysql 怎么设置ip地址_Mysql设置用户指定ip地址操作数据库的方法
Mysql设置用户指定ip地址操作数据库的方法 发布时间:2020-09-29 15:00:47 来源:亿速云 阅读:65 作者:小新 这篇文章主要介绍Mysql设置用户指定ip地址操作数据库的方法, ...
- 用户密码在后台数据库中加密存储方式
常见的用户密码在后台数据库中加密存储方式 如何安全的存储用户密码 常见登录密码加密方式 JavaScript逆向实战:admin加密成WaQ7xbhc9TefbwK是什么加密算法?逆向思维考验.详细流 ...
- mysql数据库ip地址_MySQL数据库存储IP地址的方法
为什么要问如何存储IP? 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能.而数据库设计是程序设计中 ...
- oracle数据库存储ip地址,oracle – 以十进制形式存储的IP地址 – PL / SQL以虚线四边形显示...
这是您需要的功能: create or replace function inttoip(ip_address integer) return varchar2 deterministic is be ...
- MySQL基础|设置登录用户权限,访问ip地址---防止数据库误删,详细版
对于公司的开发团队来说,需要协同维护同一个数据表,但是要防止新人因为代码不熟悉或者什么其他原因,把整个数据表给删除掉. 毕竟对于公司来说,一个程序是可以复刻的,但是极具商业价值的数据表却是长时间才能积 ...
- 常见的用户密码在后台数据库中加密存储方式
转载自:https://blog.csdn.net/ctrip_tech/article/details/80125741 一.用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什 ...
最新文章
- PyTorch 图像分类
- PL/SQL Developer使用技巧、快捷键
- python 抽象类分析
- C#高效编程话题集1(每期10话题)
- [css] 给一个图片设置透明有哪些方式呢?
- 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题
- Python:程序生成Windows可执行文件/不显示命令执行窗口/无法生成exe报错TypeError: an integer is required (got type bytes)解决方法
- tftp拷贝linux文件夹,CentOS下使用TFTP向目标板传送文件
- Android平板怎么截屏,华为平板怎么截屏(华为平板快速截图)
- H5网站模板——前台和后台
- php网站系统说明,国外CMS系统介绍(总结)
- 【第2篇】人工智能(AI)语音测试原理和实践
- html css二级下拉菜单,下拉导航 - 两级菜单(CSS/HTML)
- 珍大户《认知世界的经济学》学习笔记 -- 第17课 影响消费者的因素,更新时间2021年03月18日21:53:57
- python自然语言处理学习笔记一
- C# 扫描并读取图片中的文字(.NET Core)
- Unity3d场景渲染出图
- 用python提取发票扫描件常用的10多个发票信息保存到excel表
- rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中
- 关于个人电脑C盘清理的一些小整合