美文网首页
MySQL和PHP中以整型存储IP地址

MySQL和PHP中以整型存储IP地址

作者: _树摇风 | 来源:发表于2021-08-11 09:23 被阅读0次

一般我们在数据库中会用到ip地址用来查记录的等等,而ip地址是分为四段的,一般是用varchar或char类型存储。但是其实有更好的存储方法就是以整型存储IP地址、因为char和varchar所占字节会比int类型要大,例如:char(16),就占了16个字节,而使用 int类型的时候只占了4字节。假如使用char类型来存储ip地址,当数据达到1亿的时候会比使用int类型存储ip地址要多1.8G的存储空间。所以在设计数据表结构的时候以int类型存储IP地址为最佳,且设置符号类型为unsigned会保证了长度不够的情况。使用整型的优势:占用空间小、查询速度快、同时也方便比较(between之类的sql语句)。下面用PHP与SQL展示如何用函数将ip地址相互转换。

//你的ip地址 
$user_ip = $_SERVER['REMOTE_ADDR'];
//将获取到的ip地址转换为整型以及无符号格式
$save_ip = sprintf('%u',ip2long($userIp));
//转换整型后的ip地址
echo $save_ip;
//将整型的ip地址转换为正常ip地址
echo long2ip($save_ip);

SQL示例

-- 将ip地址转换为整型
select inet_aton('192.168.1.1');
-- 将整型ip地址转换为正常ip地址
select inet_ntoa('3232235777');

int和bigint的区别

bigint 带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
int 普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。

有符号int最大可以支持到约22亿,远远大于我们的需求和MySQL单表所能支持的性能上限。对于OLTP应用来说,单表的规模一般要保持在千万级别,不会达到22亿上限。如果要加大预留量,可以把主键改为改为无符号int,上限为42亿,这个预留量已经是非常的充足了。
使用bigint,会占用更大的磁盘和内存空间,内存空间毕竟有限,无效的占用会导致更多的数据换入换出,额外增加了IO的压力,对性能是不利的。

因此推荐自增主键使用int unsigned类型,但不建议使用bigint

相关文章

  • MySQL和PHP中以整型存储IP地址

    一般我们在数据库中会用到ip地址用来查记录的等等,而ip地址是分为四段的,一般是用varchar或char类型存储...

  • Mysql怎样存储IP地址

    Mysql怎样存储IP地址 概述 在Mysql中并没有提供针对IP地址存储的数据格式,在开发中我们可以选择使用ch...

  • mysql-php使用整型保存IP地址

    在MySQL中没有直接提供IP类型字段,但有两个函数可以把IP与最大长度为10位数字类型互转,所以使用unsign...

  • MySQL 存储IP地址

    ip 地址(ipv4格式) 127.0.0.1 如果用 varchar 存储,需要占用 15 个字节如果用 uns...

  • MySQL相关优化操作

    SHOW PROCESSLIST显示哪些线程正在运行 存储IP地址尽量用整型,不要用字符,可以减少存储空间,可以通...

  • MysSql 存储ip地址

    mysql提供了两个方法来处理ip地址: inet_aton把ip转为无符号整型(4-8位)inet_ntoa把整...

  • 如何允许远程连接到MySQL数据库服务器?

    配置MySQL服务器 第一步是设置MySQL服务器,以侦听机器上的某个特定IP地址或所有IP地址。 如果MySQL...

  • 2018-05-23

    继续数组的学习。 指针的学习笔记和例题笔记 地址特殊的整型值不能用整型变量存储地址取地址符号& Include V...

  • MySQL有效的存储IP地址

    本文仅供笔者平日学习笔记之用,侵删作者:鸭血粉丝链接:https://mp.weixin.qq.com/s/P_w...

  • ip 地址转长整型

网友评论

      本文标题:MySQL和PHP中以整型存储IP地址

      本文链接:https://www.haomeiwen.com/subject/rhbqbltx.html