1
frozenway OP 我的意思是想问 IPV6 字符长度是多少
|
2
picone 2020-06-16 09:44:43 +08:00
IPv6 地址是 128bit,相当于 16 个 char 就够了,你可以存 blob 。当然读写都得转换一下。
|
3
temporary 2020-06-16 09:45:47 +08:00
|
4
liuser666 2020-06-16 09:47:52 +08:00
不会吧?现在程序员连 ipv6 多少位都不知道了? 128 位,16 字节。你要是想作为字符串存还得考虑里面的冒号以及简便写法。
|
6
littleylv 2020-06-16 09:55:26 +08:00 7
V 站问题质量越来越低,百度一下 1 分钟可以知道答案的问题都能问了。
|
7
zhuweiyou 2020-06-16 09:57:15 +08:00
我以为我进了贴吧
|
9
chenyu0532 2020-06-16 10:04:56 +08:00
@frozenway 楼上也不是这个意思。。只是这种 baidu 有的问题就直接 baidu 了。。在这发帖子浪费时间
|
10
dayFvckingByte 2020-06-16 10:07:44 +08:00 11
@frozenway 我觉得你用发这帖子的时间一个一个数都能数出来了😂
|
11
Kilerd 2020-06-16 10:15:14 +08:00 5
网管不是应该对这个玩意儿更加熟悉吗?
网管是不是应该要有 CCIE 证书啥的。 |
12
morphyhu 2020-06-16 10:18:08 +08:00
这个帖子拉低了 V2EX 的逼格。
|
13
mitu9527 2020-06-16 10:18:18 +08:00 19
不是我们高傲,而是我们希望你能自己解决这个问题,对我们有尊重,对你自己也有好处。这种问题你自己稍微查一下再试一下就能搞定,没必要跑来提问,对你来说是节省了时间,对别人来说呢?这种把别人当工具的提问方式,不只是程序员,相信其他人也不会觉得舒服。
|
14
CismonX 2020-06-16 10:26:23 +08:00 via iPhone 2
这个长度应该为 inet_ntop() 的 buffer 大小减去 1,即 INET6_ADDRSTRLEN - 1 = 45 字节。举例:ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255
|
15
ylsc633 2020-06-16 10:30:10 +08:00 2
如果不清楚的人估计第一反应都是用 varchar 来存! 方便直观
不过在 MySQL 高性能这本书里推荐的是(unsigned int) 来存储,相比字符串: 1. 节省空间,不管是数据存储空间还是索引存储空间 2. 便于使用范围查询,且效率快 3. 就是在数据库里直观看,不是很方便 IPv4 用 inet_aton 来将 IP 转成 int,用 inet_ntoa 将 int 转回 IP IPv6 用 inet6_aton 来将 IP 转成 INT,用 inet6_ntoa 将 int 转回 IP |
16
GeruzoniAnsasu 2020-06-16 10:33:57 +08:00 2
补充一下( lz 说的是放进“数据库”,并没有指明是什么数据库):
https://www.postgresql.org/docs/9.1/datatype-net-types.html PG 扩展的数据类型是选用它一个很重要的原因之一 |
17
msg7086 2020-06-16 10:37:39 +08:00
首先,如果是存数据库,为什么要特意限制 varchar 的长度?
255 字节内的存储成本都是一样的,直接设 varchar(255) ascii 不就行了? 然后 IP 地址存数据库,当然是 VARBINARY(16)咯。 官网找 IPv6 就有全套说明: https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_inet6-aton |
18
msg7086 2020-06-16 10:38:16 +08:00
@GeruzoniAnsasu (偷偷提醒一下,帖子的分类)
|
19
GeruzoniAnsasu 2020-06-16 10:41:09 +08:00
@msg7086 是我瞎了不好意思
|
20
fxxkgw 2020-06-16 10:52:00 +08:00 3
官方推荐用 varbinary(16) 这个兼容 IPV4 IPV6
每次存储前都需要使用 INET6_ATON("ipv4")、INET6_ATON("ipv6")转化为字节码后存储 获取时都需要用 INET6_NTOA("ipv4")、INET6_NTOA("ipv6")转化为字符串 上面这 4 个函数是兼容 IPV4 IPV6 的,貌似对 mysql 版本有要求(忘记具体哪个版本了),不过一般只要不是太老肯定都支持的。。 |
21
frozenway OP |
22
xnode 2020-06-16 11:29:36 +08:00
varchar(255)的意思不是最大 255? 小于 255 用多少占多少? char 才是固定长度吧
|
23
uricc 2020-06-16 12:32:32 +08:00 via iPhone
IPv6 的小鸡不都是免费褥么,参考德国 euserv
|
24
zy445566 2020-06-16 14:30:06 +08:00
字符串最长 39 位如下:
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 字符串最短 4 位如下: 0::0 |
26
CodeCodeStudy 2020-06-16 16:52:18 +08:00
@msg7086 varchar 的长度还是有影响的,在关联查询的时候会生成临时表,长度越大,临时表越大。
在 https://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tables.html 找到 VARCHAR and VARBINARY column values are padded to the maximum column length, in effect storing them as CHAR and BINARY columns. |
27
msg7086 2020-06-16 17:00:13 +08:00
@CodeCodeStudy
是,关联查询会不一样,但是都已经在字符串上关联了,临时表大小可能已经是小问题了…… |
28
realpg 2020-06-16 17:20:23 +08:00
用 varchar 存 既然都是 var 了 直接给个 200 够了……
|
29
ChanKc 2020-06-16 19:11:57 +08:00 via Android
今天的 leetcode explore 的题你定的?(笑
|
30
prenwang 2020-06-16 22:29:22 +08:00
屁, 有啥不能问的, 质量不好的帖子自然会沉下去, 你觉得未提质量低不回复直接忽略就是, 这社区有一套适合每个人的过滤机制, 总有人把自己当卫道士一样. 恶心, 恶心,恶心
|
31
lekai63 2020-06-16 22:33:48 +08:00 via iPhone
换我就直接用 pgSQL 存 ip 类型
|
33
6orz 2020-10-26 09:08:24 +08:00
人家只是问 varchar 多少存一下,回复这么多没用的,楼主你设置 varchar ( 30 )就行了。
|