IP 地址,你们一般用什么数据类型存储?

2022 年 9 月 20 日
 woomly

我查网上资料,在数据库中存储 IP 地址,通常有使用 VARCHARUNSIGNED INT 两种方案,各有利弊。请问各位在项目中使用哪种方案存储 IP 地址字段?

4975 次点击
所在节点    数据库
30 条回复
GeorgeGalway
2022 年 9 月 20 日
VARCHAR
danbai
2022 年 9 月 20 日
VARCHAR
0o0O0o0O0o
2022 年 9 月 20 日
VARBINARY(4) 或者 VARBINARY(16)
LeegoYih
2022 年 9 月 20 日
都可以,varchar 方便读,int 节约一点点空间,IP 应该不会有模糊查询的需求吧?
同一个项目中使用统一规范即可,不用纠结
fisherwei
2022 年 9 月 20 日
你们用 varchar 存储的,遇到需要匹配 x.x.x.x/y 的需求怎么处理的?

比如加白、拉黑
676529483
2022 年 9 月 20 日
@fisherwei 转换成 int ,走位运算
fisherwei
2022 年 9 月 20 日
@676529483 那为啥不直接存成 int
tramm
2022 年 9 月 20 日
随意啦,需要存 IP 地址的地方也不多吧...
rekulas
2022 年 9 月 20 日
@fisherwei 不纠结都存就行了,兼顾可阅读性和效率,空间不值钱
lmshl
2022 年 9 月 20 日
UNSIGNED INT ,遇到取 cidr 的时候,直接 BETWEEN 就搞定了
picone
2022 年 9 月 20 日
@LeegoYih @fisherwei 即使模糊查询,int 类型应该是最高效的,特别是 ipv6 有简写。可以把查询的 ip 也转成 int ,然后位运算。
require 1.1.1.0/24 => 16843008/24
query = 1.1.1.234 => 16843242
最后判断 16843242 & 0xFFFFFF00 == 16843008
Wdafff
2022 年 9 月 20 日
磁盘便宜,怎么方便怎么来
QKgf555H87Fp0cth
2022 年 9 月 20 日
一切从简,VARCHAR
knightdf
2022 年 9 月 20 日
你可以都存
agagega
2022 年 9 月 20 日
用 unsigned int 小心 ipv6
IDAEngine
2022 年 9 月 20 日
存 16 进制
loginv2
2022 年 9 月 20 日
两个都存
masterclock
2022 年 9 月 20 日
ipv4 ,存字符串的话,存前先同一个格式吗?
比如 127.0.0.1
127.1
0177.0.0.1
0177.1
0x7F000001
167772673
adoal
2022 年 9 月 20 日
PostgreSQL 原生 inet/cidr 类型
NoString
2022 年 9 月 20 日
clickhouse 有 ipv4 和 ipv6 的类型

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX