在数据库里存储 IPv6 地址的最佳做法是? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
There is no place like ::1
Livid
183.99D
595.75D
V2EX    IPv6

在数据库里存储 IPv6 地址的最佳做法是?

  •  
  •   Livid
    PRO
    2018-05-04 21:38:51 +08:00 via iPhone 12459 次点击
    这是一个创建于 2783 天前的主题,其中的信息可能已经有所发展或是发生改变。
    字符串?或者两个 64 位整数?
    17 条回复    2023-09-15 19:16:46 +08:00
    lisonfan
        1
    lisonfan  
       2018-05-04 21:44:18 +08:00
    字符串好一些吧
    fengyj
        2
    fengyj  
       2018-05-04 21:48:43 +08:00 via Android
    觉得 64 位二进制好点,毕竟好约束。
    dobelee
        3
    dobelee  
       2018-05-04 21:50:17 +08:00 via Android
    只是用作记录的话与 v4 一样字符串就 ok 了吧。毕竟存储成本是最低的。
    samray
        4
    samray  
       2018-05-04 21:50:26 +08:00
    首先应该明确是什么数据库,如果是 postgresql, 已经内置了专门的数据类型来存储 IP 地址(ipv4 和 ipv6) https://www.postgresql.org/docs/9.1/static/datatype-net-types.html
    glues
        5
    glues  
       2018-05-04 21:51:47 +08:00
    PostgreSQL 直接有 Network Address Types
    yangqi
        6
    yangqi  
       2018-05-04 21:52:36 +08:00   2
    EPr2hh6LADQWqRVH
        7
    EPr2hh6LADQWqRVH  
       2018-05-04 21:53:53 +08:00
    看具体实现喽,一看地址里面 0 到底多不多,二看实现里面有没有压缩这些 0 的处理
    moult
        8
    moult  
       2018-05-04 22:05:59 +08:00
    借楼问一下,如果要实现 IPv6 的归属地数据表,该怎么存储。
    原来 IPv4 的话,存一个 begin 和 end,然后查询的时候 ip>=begin && ip<=end 即可。但是 IPv6 显然不行了。
    shiina
        9
    shiina  
       2018-05-04 22:09:51 +08:00   2
    搜了一下, 发现了这个帖子 [doge]
    t/66880
    zsj950618
        10
    zsj950618  
       2018-05-05 01:40:48 +08:00
    没想到这个问题 3 年了,ipv6 还没普及。
    zsj950618
        11
    zsj950618  
       2018-05-05 01:41:16 +08:00
    @zsj950618 5 年(
    rootx
        12
    rootx  
       2018-05-05 04:41:46 +08:00 via iPhone
    没想到这个问题 5 年了,Livid 还没研究出来。
    lianyue
        13
    lianyue  
       2018-05-05 08:05:47 +08:00 via iPhone
    存二进制 字符串 就好了
    fyyz
        14
    fyyz  
       2018-05-05 13:11:39 +08:00 via Android
    就存字符串
    kaneg
        15
    kaneg  
       2018-05-05 15:40:31 +08:00 via iPhone
    不管是存字符串还是数字型,都最好格式化成标准形式,以便于在日后使用过程中查找匹配可以应对各种输入形式
    hushao
        16
    hushao  
       2019-11-21 23:30:14 +08:00
    +1 年,想知道 Livid @Livid 目前研究出来的方案是个啥?
    hanssx
        17
    hanssx  
       2023-09-15 19:16:46 +08:00
    压缩到最小存储空间,16 位字符,每个字符 8 位,16*8=128 ,正好可以哎,但是每个字符表示 8 位,就会有不可见字符,64 种不同可能,2 的 6 次方,每个字符 6 位,128/6 除以不了。如果按照 64 进制来,128 位,给它补位到能整除的话,132/6=22 ,用 22 位存,末尾补 132-128=4 个零。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4420 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:01 PVG 18:01 LAX 02:01 JFK 05:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86