|  |      1frozenway OP 我的意思是想问 IPV6 字符长度是多少 | 
|  |      2picone      2020-06-16 09:44:43 +08:00 IPv6 地址是 128bit,相当于 16 个 char 就够了,你可以存 blob 。当然读写都得转换一下。 | 
|      3temporary      2020-06-16 09:45:47 +08:00 | 
|      4liuser666      2020-06-16 09:47:52 +08:00 不会吧?现在程序员连 ipv6 多少位都不知道了? 128 位,16 字节。你要是想作为字符串存还得考虑里面的冒号以及简便写法。 | 
|  |      6U7Q5tLAex2FI0o0g      2020-06-16 09:55:26 +08:00  7 V 站问题质量越来越低,百度一下 1 分钟可以知道答案的问题都能问了。 | 
|      7zhuweiyou      2020-06-16 09:57:15 +08:00 我以为我进了贴吧 | 
|      9chenyu0532      2020-06-16 10:04:56 +08:00 @frozenway 楼上也不是这个意思。。只是这种 baidu 有的问题就直接 baidu 了。。在这发帖子浪费时间 | 
|      10dayFvckingByte      2020-06-16 10:07:44 +08:00  11 @frozenway 我觉得你用发这帖子的时间一个一个数都能数出来了😂 | 
|  |      11Kilerd      2020-06-16 10:15:14 +08:00  5 网管不是应该对这个玩意儿更加熟悉吗?  网管是不是应该要有 CCIE 证书啥的。 | 
|      12morphyhu      2020-06-16 10:18:08 +08:00 这个帖子拉低了 V2EX 的逼格。 | 
|      13mitu9527      2020-06-16 10:18:18 +08:00  19 不是我们高傲,而是我们希望你能自己解决这个问题,对我们有尊重,对你自己也有好处。这种问题你自己稍微查一下再试一下就能搞定,没必要跑来提问,对你来说是节省了时间,对别人来说呢?这种把别人当工具的提问方式,不只是程序员,相信其他人也不会觉得舒服。 | 
|  |      14CismonX      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 | 
|      15ylsc633      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 | 
|      16GeruzoniAnsasu      2020-06-16 10:33:57 +08:00  2 补充一下( lz 说的是放进“数据库”,并没有指明是什么数据库): https://www.postgresql.org/docs/9.1/datatype-net-types.html PG 扩展的数据类型是选用它一个很重要的原因之一 | 
|  |      17msg7086      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 | 
|  |      18msg7086      2020-06-16 10:38:16 +08:00 @GeruzoniAnsasu (偷偷提醒一下,帖子的分类) | 
|      19GeruzoniAnsasu      2020-06-16 10:41:09 +08:00 @msg7086 是我瞎了不好意思 | 
|  |      20fxxkgw      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 版本有要求(忘记具体哪个版本了),不过一般只要不是太老肯定都支持的。。 | 
|  |      21frozenway OP | 
|  |      22xnode      2020-06-16 11:29:36 +08:00 varchar(255)的意思不是最大 255? 小于 255 用多少占多少? char 才是固定长度吧 | 
|  |      23uricc      2020-06-16 12:32:32 +08:00 via iPhone IPv6 的小鸡不都是免费褥么,参考德国 euserv | 
|  |      24zy445566      2020-06-16 14:30:06 +08:00 字符串最长 39 位如下: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 字符串最短 4 位如下: 0::0 | 
|      26CodeCodeStudy      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. | 
|  |      27msg7086      2020-06-16 17:00:13 +08:00 @CodeCodeStudy  是,关联查询会不一样,但是都已经在字符串上关联了,临时表大小可能已经是小问题了…… | 
|  |      28realpg PRO 用 varchar 存 既然都是 var 了 直接给个 200 够了…… | 
|      29ChanKc      2020-06-16 19:11:57 +08:00 via Android 今天的 leetcode explore 的题你定的?(笑 | 
|  |      30prenwang      2020-06-16 22:29:22 +08:00 屁, 有啥不能问的, 质量不好的帖子自然会沉下去,  你觉得未提质量低不回复直接忽略就是, 这社区有一套适合每个人的过滤机制,  总有人把自己当卫道士一样. 恶心, 恶心,恶心 | 
|  |      31lekai63      2020-06-16 22:33:48 +08:00 via iPhone 换我就直接用 pgSQL 存 ip 类型 | 
|  |      336orz      2020-10-26 09:08:24 +08:00 人家只是问 varchar 多少存一下,回复这么多没用的,楼主你设置 varchar ( 30 )就行了。 |