我查网上资料,在数据库中存储 IP 地址,通常有使用 VARCHAR
和 UNSIGNED INT
两种方案,各有利弊。请问各位在项目中使用哪种方案存储 IP 地址字段?
![]() | 1 GeorgeGalway 2022-09-20 10:30:55 +08:00 VARCHAR |
![]() | 2 danbai PRO 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 ![]() 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 运算函数转换。 |