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

2022-09-20 10:29:30 +08:00
 woomly

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

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

比如加白、拉黑
676529483
2022-09-20 10:43:57 +08:00
@fisherwei 转换成 int ,走位运算
fisherwei
2022-09-20 10:46:14 +08:00
@676529483 那为啥不直接存成 int
tramm
2022-09-20 10:48:03 +08:00
随意啦,需要存 IP 地址的地方也不多吧...
rekulas
2022-09-20 10:48:12 +08:00
@fisherwei 不纠结都存就行了,兼顾可阅读性和效率,空间不值钱
lmshl
2022-09-20 10:48:54 +08:00
UNSIGNED INT ,遇到取 cidr 的时候,直接 BETWEEN 就搞定了
picone
2022-09-20 10:50:55 +08:00
@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-09-20 11:06:15 +08:00
磁盘便宜,怎么方便怎么来
likunyan
2022-09-20 11:07:16 +08:00
一切从简,VARCHAR
knightdf
2022-09-20 11:08:44 +08:00
你可以都存
agagega
2022-09-20 11:11:11 +08:00
用 unsigned int 小心 ipv6
IDAEngine
2022-09-20 11:20:15 +08:00
存 16 进制
loginv2
2022-09-20 13:03:29 +08:00
两个都存
masterclock
2022-09-20 13:19:34 +08:00
ipv4 ,存字符串的话,存前先同一个格式吗?
比如 127.0.0.1
127.1
0177.0.0.1
0177.1
0x7F000001
167772673
adoal
2022-09-20 14:33:49 +08:00
PostgreSQL 原生 inet/cidr 类型
NoString
2022-09-20 14:42:24 +08:00
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