关于IP在MySQL中的存储
对于很多新手而言,他们总会纠结,怎样才能更好的设计MySQL数据库呢;作为一个从菜鸟走过来的人,深有体会,刚开始我也不知道什么是外键、什么是事务处理、怎样合理的定义一个字段,说到字段,今天我就带领大家一起来学习PHP中的函数ip2long()的用法;
相信大家也能在百度中搜索到关于该函数的用法,而我却是在总结大家可能不知道的一些知识,好了,废话少说,让我们进入正题吧!
PHP手册中关于ip2long()函数的介绍:将一个IPV4的字符串互联网协议转换成数字格式,这里指的是IPV4,而不是IPV6!
很多程序员设计数据库表时都喜欢创建一个varchar(15)字段来存储IP的值, 一些高级工程师给出的建议是使用int类型,只需要4个字节,这样不仅能够节省空间,最重要的是查询比较快,对于少量数据是体现不出来的,如果将来有一天我们的数据越来越多时,这点小小的优化将会表现的非常重要了,作为一名PHP工程师要有一个良好的编程习惯,不要觉得项目小就不在乎;
那么ip2long函数就起到作用了,当你存储IP之前,使用ip2long('ip')转成int类型存储,读取的时候使用long2ip()就可以了;
下面一点是我在调试中做的总结,希望给读者朋友们带来便利
ipv4大家都知道是从0.0.0.0到255.255.255.255;然而使用ip2long函数转换后并不是我们想象中的0到4294967295,而是0.0.0.0-127.255.255.255转换后为0到2147483647;128.0.0.0-255.255.255.255转换后为-2147483647到-1;
咦,你是不是发现一个很神奇的问题IP地址转换成int类型正好是int的有符号取整范围,为什么呢?大家知道MySQL中int类型占4个字节,每个字节占8位,总大小为28*28*28*28=255*255*255*255,是不是和IP地址的范围很类似;实际开发中其实我们并不需要关心ip转换成int类型的值,存的时候ip2long,读的时候long2ip就可以了;
我们来思考一个问题:这是我在网上看到的一篇博文
ip2long('10.52.1.129');// 171180417
ip2long('10.052.1.129');//170525057
ip中有前导零导致的转换结果不一致,他说是bug,请问同学们,这是bug吗?如果这真是bug,PHP经历这么多版本,居然没有解决?聪明的同学立马会看懂,有前导零还是标准的IP吗?对不对?
关于IP在MySQL中的存储的更多相关文章
- 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...
- MySQL 中如何存储 emoji ?
MySQL 中如何存储 emoji ? 问题还原 使用 erlang 存储一些特殊字符串到 MySQL 的时候,却没法读出来.经检查,这些字符串的二进制格式如下: <<240,159,15 ...
- MySql中innodb存储引擎事务日志详解
分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...
- mysql中InnoDB存储引擎的行锁和表锁
Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. ...
- mysql中的存储引擎
MySQL中常用的几种存储引擎:innoDB.bdb.myisam.memory以及这几个引擎的讲解: InnoDB存储引擎: (1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修 ...
- MySQL(二)MySQL中的存储引擎
前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...
- MySQL中InnoDB存储引擎的实现和运行原理
InnoDB 存储引擎作为我们最常用到的存储引擎之一,充分熟悉它的的实现和运行原理,有助于我们更好地创建和维护数据库表. InnoDB 体系架构 InnoDB 主要包括了: 内存池.后台线程以及存储文 ...
- 修改mysql中数据库存储主路径
一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开文件夹C:\ProgramData\MySQL\MySQL Server 5.7中的my.ini文件 ...
- MySQL中InnoDB存储引擎中的哈希算法
InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式.对于缓冲池页的哈希表来说,在缓冲池中的Page页都有一个chain指针.它指向相同哈希函数值的页的. ...
随机推荐
- .net core 单元测试小记
创建项目,选择.net core的类库(class library) 修改project.json的配置 { "version": "1.0.0-*", &qu ...
- NPM使用介绍
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用 允许用户NPM服务器下载并安装别 ...
- hdu 3666 THE MATRIX PROBLEM
差分约束系统. 根据题意,可以写出不等式 L <= (Xij * Ai) / Bj <= U 即 Ai/Bj<=U/Xij和Ai/Bj>=L/Xij 由于差分约束系统是减法.. ...
- hdu1021
#include <stdio.h> int fib(int m){ int n_2=1,n_1=2,n,i; if(m==0)return 1; if(m==1)return 2; fo ...
- 编写高质量iOS代码的52个有效方法2-1
一.变量的定义位置(用{}声明示例变量或者用@property属性声明实例变量) 1.用{}声明示例变量: 此方法生命的实例变量,编译器在编译时,会自动计算其偏移量(表示该变量距离存放对象的内存区域的 ...
- SDWebImage实现图片缓存
我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...
- HDU 3404&POJ 3533 Nim积(二维&三维)
(Nim积相关资料来自论文曹钦翔<从"k倍动态减法游戏"出发探究一类组合游戏问题>) 关于Nim积计算的两个函数流程: 代码实现如下: ][]={,,,}; int N ...
- Lightoj 1066 Gathering Food (bfs)
Description Winter is approaching! The weather is getting colder and days are becoming shorter. The ...
- clion idea jetbrain windows下搞c/c++
安装 clion 把MinGW(搜MinGW.zip)放到c盘根目录下 ok
- 洛谷-语文成绩-[有奖]洛谷5月月赛:kkksc03的三大神器
题目背景 Background语文考试结束了,成绩还是一如既往地有问题. 题目描述 Description语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行.她总是要一遍遍地给某些同学增加分数 ...