如何存储IP
程序设计要在功能实现的基础上最大限度的优化性能。而数据库设计是程序设计中不可忽略的重要部分,巧存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 rowin set (0.00 sec)
mysql>select inet_aton('192.168.1.1');
+--------------------------+
| inet_aton('192.168.1.1') |
+--------------------------+
| 3232235777 |
+--------------------------+
1 rowin set (0.00 sec)
mysql>select inet_aton('10.10.10.10');
+--------------------------+
| inet_aton('10.10.10.10') |
+--------------------------+
| 168430090 |
+--------------------------+
1 rowin 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 rowin set (0.00 sec)
mysql>select inet_ntoa(3232235777);
+-----------------------+
| inet_ntoa(3232235777) |
+-----------------------+
| 192.168.1.1 |
+-----------------------+
1 rowin set (0.00 sec)
mysql>select inet_ntoa(168430090);
+----------------------+
| inet_ntoa(168430090) |
+----------------------+
| 10.10.10.10 |
+----------------------+
1 rowin set (0.00 sec)
mysql>select inet_ntoa(0);
+--------------+
| inet_ntoa(0) |
+--------------+
| 0.0.0.0 |
+--------------+
1 rowin set (0.00 sec)
注意,0转换为 0.0.0.0
*******************华丽分割***********************
以上为原文内容,实际使用中,换了一台IP地址较大的机器登陆后,发现数据库中竟存入了一个负值...
环境PHP+MYSQL+32位WIN7
于是查找原因...此处省略3000字
结果如下:
原因:PHP自带的ip2logng('192.168.1.17'),转换IP地址后,其值超出了32位系统INT的取值范围,导致溢出,结果为负
解决方案:将MYSQL存储IP的字段设置为bigint类型,否则会溢出
存储IP之前,将ip2long转换过的值处理为2进制,再处理回10进制,示例:bindec(decbin(ip2long('192.168.1.17'))); //3232235793
至此问题解决,后遗症暂未发现,发现再纠正...
from:http://www.qttc.net/201208193.html 修正:Faddei
在Jena框架下基于MySQL数据库实现本体的存取操作
在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...
连接mysql数据库时提示2003 can't connect to MySQL server on ip(10060)的解决办法
今天部署 JavaWeb 项目到云服务器,突然出现can t connect to MySQL server on ip的问题 经过了一些检查,认为很有可能是防火墙的原因.下面是检查的具体操作: 因为 ...
MySQL怎样存储IP地址 IP转数字 互转
MySQL怎样存储IP地址 - cn三少 - 博客园 https://www.cnblogs.com/cnsanshao/p/3326648.html
mysql设置指定ip远程访问连接的方法
本文实例讲述了mysql设置指定ip远程访问连接的方法,分享给大家供大家参考.具体实现方法如下: 1. 授权用户root使用密码jb51从任意主机连接到mysql服务器: 复制代码 代码如下: GRA ...
mysql 监听ip地址修改
如何修改MySQL监听IP地址 Mysql默认在本地环路地址127.0.0.1的3306端口监听,要使用其它IP地址需要修改配置文件. 1.编辑/etc/my.cnf 在[mysqld]节中增加下面一 ...
MYSQL数据库无法使用IP地址访问的解决办法
1.在运行中输入CMD,确定,进入文本方式. 2.输入mysql -h localhost -u root -p 回车,使用ROOT用户登录. 3.输入use mysql; 显示Database ch ...
随机推荐
获取网页文档的URL和连接来源
maker 2008年发表在genome Res
http://gmod.org/wiki/MAKER_Tutorial 简单好用 identify repeats, to align ESTs and proteins to the genome, ...
windows程序设计读书笔记1——创建窗口
第一个win32程序,简单的创建窗口: #include LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ...
关于对HandlerThread的了解
在Android中经常需要创建一个循环线程,有耗时操作时候,放到里面去操作,如果没有耗时操作,就让该线程处于等待,但是不要杀死它, 最好不要一旦有耗时任务,就立刻创建一个新线程,因为会有性能问题. H ...
Oracle入门《Oracle介绍》第一章1-3 Oracle 逻辑组件
一.数据库的逻辑结构是从逻辑的角度分析数据库的组成.Oracle 的逻辑组件包括: 1.表空间 表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统 ...
codeforces 502 g The Tree
题解: 一道优秀的题目 有几种做法: 1.维护后缀和 刚开始我想的是维护前缀和 然后用$sum[x]-sum[y]>=dep[x]-dep[y]$来做 但是这样子树赋值为0这个操作就很难进行了 ...
接口测试工具-Jmeter使用笔记(七:用户定义的变量)
使用场景:一组API根据业务流程制作成测试脚本,想要移植到其他测试环境时,由于数据库发生了变更,有些初始化数据也相应发生了变化,例如环境地址.请求路径等等.博主甚至把服务器地址和接口的部分共同请求路径 ...
Eloquent JavaScript #03# functions
索引: let VS. var 定义函数的几种方式 more... 1.作者反复用的side effect side effect就是对世界造成的改变,例如说打印某些东西到屏幕,或者以某种方式改变机器 ...
hdu-1171(多重背包+二进制优化)
题目链接: 思路:找每次最多装一半的情况,注意数组范围,前几次dp开小了,一直RE. #include #include #include& ...
Ironic , Openstack Baremetal Hypervisor
Ironic , Openstack Baremetal Hypervisor,首发于UnitedStack Inc.. 转自: http://ju.outofmemory.cn/entry/4876 ...