关于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指针.它指向相同哈希函数值的页的. ...
随机推荐
- ACdream 1020 The Game about KILL
找规律. 11 3 1 3 5 7 1 3 5 7 9 11 13 15 ....... #pragma comment(linker, "/STACK:1024000000,1024000 ...
- Paint Pearls
Paint Pearls 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5009 dp+双向链表优化 看到题目,很自然地可以定义状态:dp[i]表示涂好 ...
- Debug / Inspect WebSocket traffic with Fiddler【转】
Introduction I have recently written a project using SignalR, which supports HTML 5 WebSocket. Howe ...
- 转-CSS优先级(权重)解析
1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的 ...
- Struts入门学习(三)---自定义类型转换器
类型转换器是将浏览器传递的参数进行转换为了与服务器端的参数匹配,先举个例子如果我们想往服务器传递日期类型的参数时我们要怎么让浏览器传过去的让服务器明白 我们新建一个类 ConverterTest.ja ...
- strings
3.1.1.1 计算列表中的字符串数目 使用Count属性可计算列表中的字符串数目.Count是只读属性,用以指示列表中字符串列表数目.因为字符串列表是以零开始索引,因而Count比列表的最大索引数大 ...
- BASE2(matlab)
%{ // %} clc % linspace(3,5) 3到5 分成100 default %{ a=1 b=2 str = [num2str(a),'+',num2str(b)] eval(str ...
- java实现UDP聊天---转载
import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; pub ...
- JS全选
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- C语言的常用字符串操作函数(一)
一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...