对于很多新手而言,他们总会纠结,怎样才能更好的设计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中的存储的更多相关文章

  1. 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...

  2. MySQL 中如何存储 emoji ?

    MySQL 中如何存储 emoji ? 问题还原 使用 erlang 存储一些特殊字符串到 MySQL 的时候,却没法读出来.经检查,这些字符串的二进制格式如下: <<240,159,15 ...

  3. MySql中innodb存储引擎事务日志详解

    分析下MySql中innodb存储引擎是如何通过日志来实现事务的? Mysql会最大程度的使用缓存机制来提高数据库的访问效率,但是万一数据库发生断电,因为缓存的数据没有写入磁盘,导致缓存在内存中的数据 ...

  4. mysql中InnoDB存储引擎的行锁和表锁

    Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. ...

  5. mysql中的存储引擎

    MySQL中常用的几种存储引擎:innoDB.bdb.myisam.memory以及这几个引擎的讲解: InnoDB存储引擎: (1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修 ...

  6. MySQL(二)MySQL中的存储引擎

    前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以 ...

  7. MySQL中InnoDB存储引擎的实现和运行原理

    InnoDB 存储引擎作为我们最常用到的存储引擎之一,充分熟悉它的的实现和运行原理,有助于我们更好地创建和维护数据库表. InnoDB 体系架构 InnoDB 主要包括了: 内存池.后台线程以及存储文 ...

  8. 修改mysql中数据库存储主路径

    一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开文件夹C:\ProgramData\MySQL\MySQL Server 5.7中的my.ini文件 ...

  9. MySQL中InnoDB存储引擎中的哈希算法

    InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式.对于缓冲池页的哈希表来说,在缓冲池中的Page页都有一个chain指针.它指向相同哈希函数值的页的. ...

随机推荐

  1. cocos2d-3.x 创建动画

    1.多文件帧序列动画 TrademarkAnimation.h #ifndef __TRADEMARK_ANIMATION_H__ #define __TRADEMARK_ANIMATION_H__ ...

  2. Linux增加swap分区大小

    1. 查看当前分区情况 free -m 2. 增加 swap 大小, 2G 左右 dd if=/dev/zero of=/var/swap bs=1024 count=2048000 3. 设置交换文 ...

  3. css样式重置(初始化)收集

    淘宝的样式初始化: body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fields ...

  4. 常用类型转换 一.常用int和string类型转换

    常用类型转换 一.常用int类型转换1. int.parse(string) 这个类型只支持string类型 2.double doubleType = Int32.MaxValue + 1;   i ...

  5. 为什么使用 SLF4J 而不是 Log4J 来做 Java 日志

    转自:为什么使用 SLF4J 而不是 Log4J 来做 Java 日志 英文原文:Why use SLF4J over Log4J for logging in Java 每个Java开发人员都知道日 ...

  6. doc 窗口操作图

    doc 窗口操作图doc 窗口操作图vdoc 窗口操作图

  7. json格式数据 ,将数据库中查询的结果转换为json(方式2)

    controller: /*** * 返回所有版本的信息,json的形式返回到前台 * @return */ @RequestMapping(value="/getAllVersion&qu ...

  8. Python之深浅拷贝&函数

    一.深浅拷贝 深浅拷贝是指copy模块下的copy()和deepcopy()方法. 1.浅拷贝 示例: >>> import copy >>> a = 'hello ...

  9. TypeError: document.getELementById is not a function

    这个错误困扰了我好几个小时,在网上也百度了好久类似的问题但都没有结果,反反复复看了好多遍,才发现,原来是document.getELementById 里面的Element的字母 l 我写成了大写的L ...

  10. 在线用户管理--ESFramework 4.0 进阶(05)

    无论我们采用何种通信框架来构建我们的分布式系统,在服务端进行用户管理都是非常重要的一个环节.然而用户管理是否应该隶属于通信框架了?这个并不一定,通常来说,用户管理是与具体应用紧密相关的,应该是由应用解 ...