游乐游手机版
首页/科技数码/文章详情

存储IP的正确方式:告别VARCHAR,性能提升十倍的秘诀

时间:2025-12-22 10:49
如果存储方式选错了,未来不仅浪费空间,还可能导致查询性能低下。今天我就带你一步一步搞懂如何在 MySQL 里优雅地存储 IP 地址。 当我们在使用 MySQL 设计表结构的时候都会遇到一个经典问题:

如果存储方式选错了,未来不仅浪费空间,还可能导致查询性能下降。今天我就带你一步一步搞懂如何在 MySQL 里优雅地存储 IP 地址。

当我们在使用 MySQL 设计表结构的时候都会遇到一个经典问题:“如果要存 IP 地址,到底该用什么数据类型?”

别小看这个问题,存储方式一旦选错,不仅会浪费宝贵的存储空间,未来进行数据查询时也可能拖慢整个系统的速度。接下来,我们就深入探讨一下在 MySQL 中高效存储 IP 地址的正确方法。

为啥不能直接用字符串?

很多小伙伴的第一反应是:IP 地址不就是“192.168.0.1”这种字符串吗?那我直接用VARCHAR(15) 或者 CHAR(15) 存不就行了吗?

表面上来看没啥大的问题,但这样做有几个明显的弊端:

  • 空间浪费:字符串比数字类型占用更多字节,还要额外存储长度信息。
  • 查询效率低:字符串比较比数字比较要慢,索引效果也差。
  • 不方便计算:比如要判断 IP 是否落在某个网段里,字符串处理起来就很麻烦。

所以,直接用字符串存 IP 地址,只能算是最简单但不优雅的做法。

那么,到底该怎么做才比较合适呢?

IPv4:用INT UNSIGNED存整数更高效

IPv4 地址其实就是一个32位的整数,比如:

192.168.0.1 → 3232235521

在 MySQL 里我们完全可以用INT UNSIGNED类型来存储,既节省空间(4字节),又利于索引和范围查询。

插入时,用INET_ATON()转换:

INSERT INTO user_logs(ip) VALUES (INET_ATON('192.168.0.1'));

查询时,用INET_NTOA()再转回字符串:

SELECT INET_NTOA(ip) FROM user_logs;

这样就能同时兼顾空间效率和查询效率。

IPv6:用BINARY(16)存二进制

IPv6 地址更长,是128位,像这样:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

如果直接用字符串存,需要 CHAR(39),非常浪费空间。

更推荐的做法是用 BINARY(16) 或 VARBINARY(16) 存二进制形式。

MySQL 也有直接现成的函数:

插入时,用INET6_ATON():

INSERT INTO user_logs(ipv6) VALUES (INET6_ATON('2001:db8::1'));

查询时,用INET6_NTOA() 转回:

SELECT INET6_NTOA(ipv6) FROM user_logs;

占用空间16字节,支持索引,性能杠杠滴。

那么,如果既要支持 IPv4,又要支持 IPv6 怎么办呢?

这就更简单了,直接:

字段类型设为 VARBINARY(16) 或 BINARY(16),统一用 INET6_ATON()/INET6_NTOA() 存取

MySQL 会自动把 IPv4 地址映射到 IPv6 格式里,做到兼容存储,是不是非常 nice?

来个实战

以下面的建表语句为例:

CREATE TABLE user_logs (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ip BINARY(16) NOT NULL COMMENT '存储IPv4/IPv6地址',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入IPv4
INSERT INTO user_logs(ip) VALUES (INET6_ATON('192.168.0.1'));

-- 插入IPv6
INSERT INTO user_logs(ip) VALUES (INET6_ATON('2001:db8::1'));

-- 查询
SELECT INET6_NTOA(ip) AS ip_address FROM user_logs;

一套方案,IPv4 + IPv6 通吃,相当 OK

来源:https://www.51cto.com/article/832099.html
上一篇福特放缓电动化:马斯克确信燃油车时代终将落幕 下一篇小米Buds 6旗舰耳机官宣:仿生曲线设计,实时翻译再升级
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
OpenClaw手机App上线,结果翻车了
科技数码 · 2026-07-01

OpenClaw手机App上线,结果翻车了

OpenClaw 官方宣布,已正式推出 iOS 和 Android 原生移动 App,用户如今可以在手机上使用这款主打“能真正帮你做事”的个人 AI 助手。官方在 X 上给出的定位也很直接:把 Agent 放进口袋里,让用户可以在移动端处理频道消息、任务和回复。从功能上看,OpenClaw 移动端并

优必选CEO周剑:家庭机器人生态核心投入过半精力
科技数码 · 2026-07-01

优必选CEO周剑:家庭机器人生态核心投入过半精力

先说几个核心判断:优必选正在布局一盘长远战略。创始人兼CEO周剑在近期一场媒体沟通会上,直接亮出了公司未来的发展路线——工业、商用、家庭陪伴机器人三条业务主赛道并行推进,现阶段每条线各占约一半精力。一边是已经能够稳定创造收入的工业场景,另一边则是他眼中“最具想象力与未来空间”的家庭陪伴领域。工业人形

CPO/NPO/OIO开启封装级光连接价值空间,技术路线尚未收敛
科技数码 · 2026-07-01

CPO/NPO/OIO开启封装级光连接价值空间,技术路线尚未收敛

6月30日,申银万国在光连接系列研报中重点指出,MPO光连接器领域的投资机会值得高度关注。通俗来说,随着AI算力集群持续扩张,光互联升级带来的连锁效应——数据中心光纤通道数量、前面板端口密度、机柜内光纤管理复杂度——均在同步攀升。光连接器的角色早已超越传统的低价值标准件,如今它直接决定着链路插损、可

龙岗AR实景剧本游内测体验短板有效破解之道
科技数码 · 2026-07-01

龙岗AR实景剧本游内测体验短板有效破解之道

在今年龙岗区第二届人工智能与机器人发展大会上,区级部门一次性推出了7个AI“龙搭子”。其中,名为“龙导游”的成果成为文商旅融合领域的核心亮点。据南都N视频记者了解,依托“龙导游”打造的全区全域AR实景剧本游“龙岗大陆”,已在今年五一假期发布了内测版本。经过一个月市场验证后,该项目正式启动面向全社会的

南下资金6月30日净买入中芯国际与建滔积层板
科技数码 · 2026-07-01

南下资金6月30日净买入中芯国际与建滔积层板

6月30日,南下资金持续大举买入港股,单日净流入金额高达58 95亿港元。接下来,我们直接盘点哪些个股获得资金青睐、哪些遭到减持: 净买入方面,中芯国际领跑全场,单日吸金19 33亿港元;建滔积层板紧随其后,净买入10 59亿港元;腾讯控股获得7 65亿港元净流入;智谱(02513 HK)也有6 5