用户 ip 字段,在 MySQL 中到底该以何种类型存?

2019-07-30 11:39:33 +08:00
 kisshere

要包含 ipv4 和 ipv6,网上查了很多人建议 ipv4 用 php 的 ip2long 存成整数型,但是 ipv6 呢?怎样设计一个类型,能同时存 ipv4 和 ipv6,方便极速检索

3859 次点击
所在节点    程序员
14 条回复
reus
2019-07-30 12:59:53 +08:00
换 PostgreSQL,用 cidr 类型。
reus
2019-07-30 13:01:40 +08:00
mysql 就用 binary(16)
shoaly
2019-07-30 13:43:13 +08:00
问一下 存成 字符串 有啥弊端?
William911
2019-07-30 14:50:16 +08:00
有这么纠结吗? 纯展示需要就存字符串得了
jinhan13789991
2019-07-30 15:27:50 +08:00
转二进制字符串~
agdhole
2019-07-30 15:48:33 +08:00
int32
nlimpid
2019-07-30 16:16:17 +08:00
如果只有 ipv4,用 int 就够了。
如果同时有 ipv4 和 ipv6,可以使用 varbinary(16),mysql 有内置的方法处理 ip 类型,见 https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html
ladypxy
2019-07-30 16:26:36 +08:00
Discuz 做法是使用 varchar(45)
hmxxmh
2019-07-30 16:29:00 +08:00
@shoaly 万物皆可字符串
julyclyde
2019-07-30 16:31:34 +08:00
@ladypxy discuz 基本上是各种负面例子的集合
wangkai0351
2019-07-30 16:32:36 +08:00
@hmxxmh 一生二,二生三,三生万物?
falcon05
2019-07-30 16:35:25 +08:00
kiss 原则,keep it simple stupid …
mostkia
2019-07-30 16:39:38 +08:00
有 ipv6,感觉字符串好一些吧,同时限制一下数据长度即可。
fyxtc
2019-07-30 16:39:59 +08:00
怎么简单怎么来,纯展示字符串最直接,如果要解析,那么自己掂量看是把解析业务放在数据库做还是代码层做。

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

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

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

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

© 2021 V2EX