我查网上资料,在数据库中存储 IP 地址,通常有使用 VARCHAR
和 UNSIGNED INT
两种方案,各有利弊。请问各位在项目中使用哪种方案存储 IP 地址字段?
1
GeorgeGalway 2022-09-20 10:30:55 +08:00
VARCHAR
|
2
danbai 2022-09-20 10:33:18 +08:00
VARCHAR
|
3
0o0O0o0O0o 2022-09-20 10:35:41 +08:00
VARBINARY(4) 或者 VARBINARY(16)
|
4
LeegoYih 2022-09-20 10:36:51 +08:00
都可以,varchar 方便读,int 节约一点点空间,IP 应该不会有模糊查询的需求吧?
同一个项目中使用统一规范即可,不用纠结 |
5
fisherwei 2022-09-20 10:38:08 +08:00
你们用 varchar 存储的,遇到需要匹配 x.x.x.x/y 的需求怎么处理的?
比如加白、拉黑 |
8
tramm 2022-09-20 10:48:03 +08:00
随意啦,需要存 IP 地址的地方也不多吧...
|
10
lmshl 2022-09-20 10:48:54 +08:00 1
UNSIGNED INT ,遇到取 cidr 的时候,直接 BETWEEN 就搞定了
|
11
picone 2022-09-20 10:50:55 +08:00
|
12
Wdafff 2022-09-20 11:06:15 +08:00
磁盘便宜,怎么方便怎么来
|
13
QKgf555H87Fp0cth 2022-09-20 11:07:16 +08:00
一切从简,VARCHAR
|
14
knightdf 2022-09-20 11:08:44 +08:00
你可以都存
|
15
agagega 2022-09-20 11:11:11 +08:00 via iPhone
用 unsigned int 小心 ipv6
|
16
IDAEngine 2022-09-20 11:20:15 +08:00
存 16 进制
|
17
loginv2 2022-09-20 13:03:29 +08:00
两个都存
|
18
masterclock 2022-09-20 13:19:34 +08:00
ipv4 ,存字符串的话,存前先同一个格式吗?
比如 127.0.0.1 127.1 0177.0.0.1 0177.1 0x7F000001 167772673 |
19
adoal 2022-09-20 14:33:49 +08:00
PostgreSQL 原生 inet/cidr 类型
|
20
NoString 2022-09-20 14:42:24 +08:00
clickhouse 有 ipv4 和 ipv6 的类型
|
21
msg7086 2022-09-20 15:15:20 +08:00
IPv4 存 int32 ,IPv6 用 binary(16)。
|
22
newmlp 2022-09-20 19:51:14 +08:00
当然 int ,需要显示的地方让前端自己转一下就行了
|
23
JohnBull 2022-09-20 19:56:38 +08:00
PostgreSQL 内置了 CIDR 类型,支持 v4 和 v6
|
24
ericls 2022-09-21 02:11:36 +08:00 via iPhone
看要解决什么问题
|
25
julyclyde 2022-09-21 08:52:59 +08:00
varchar 显然是错误的
如果没有特定的类型,应该用某种 uint32 保存 IPv4 地址 |
26
bthulu 2022-09-21 09:24:55 +08:00
varchar, 要相信现代数据库的查询能力
|
27
cheng6563 2022-09-21 09:34:00 +08:00
char(15)
并且 1.2.3.4 存成 001.002.003.004 |
28
nothingistrue 2022-09-21 09:37:20 +08:00
看业务需求,一般没有防火墙处理的话,VARCHAR 即可,因为你业务上就是把它当字符串用的。
|
29
RRRoger 2022-09-21 10:23:21 +08:00
postgres 有专门存储 ip 的字段
|
30
Junzhou 2022-09-21 11:30:11 +08:00
直接 long 就可以了,或者无符号 int ,存取的时候使用 mysql 运算函数转换。
|