There is no place like ::1
Livid
286.33D
538.78D
V2EX  ›  IPv6

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

  •  
  •   Livid ·
    PRO
    · May 4, 2018 via iPhone · 12716 views
    This topic created in 2955 days ago, the information mentioned may be changed or developed.
    字符串?或者两个 64 位整数?
    17 replies    2023-09-15 19:16:46 +08:00
    lisonfan
        1
    lisonfan  
       May 4, 2018
    字符串好一些吧
    fengyj
        2
    fengyj  
       May 4, 2018 via Android
    觉得 64 位二进制好点,毕竟好约束。
    dobelee
        3
    dobelee  
       May 4, 2018 via Android
    只是用作记录的话与 v4 一样字符串就 ok 了吧。毕竟存储成本是最低的。
    samray
        4
    samray  
       May 4, 2018
    首先应该明确是什么数据库,如果是 postgresql, 已经内置了专门的数据类型来存储 IP 地址(ipv4 和 ipv6) https://www.postgresql.org/docs/9.1/static/datatype-net-types.html
    glues
        5
    glues  
       May 4, 2018
    PostgreSQL 直接有 Network Address Types
    yangqi
        6
    yangqi  
       May 4, 2018   ❤️ 2
    EPr2hh6LADQWqRVH
        7
    EPr2hh6LADQWqRVH  
       May 4, 2018
    看具体实现喽,一看地址里面 0 到底多不多,二看实现里面有没有压缩这些 0 的处理
    moult
        8
    moult  
       May 4, 2018
    借楼问一下,如果要实现 IPv6 的归属地数据表,该怎么存储。
    原来 IPv4 的话,存一个 begin 和 end,然后查询的时候 ip>=begin && ip<=end 即可。但是 IPv6 显然不行了。
    shiina
        9
    shiina  
       May 4, 2018   ❤️ 2
    搜了一下, 发现了这个帖子 [doge]
    https://www.v2ex.com/t/66880
    zhsj
        10
    zhsj  
       May 5, 2018
    没想到这个问题 3 年了,ipv6 还没普及。
    zhsj
        11
    zhsj  
       May 5, 2018
    @zsj950618 5 年(
    rootx
        12
    rootx  
       May 5, 2018 via iPhone
    没想到这个问题 5 年了,Livid 还没研究出来。
    lianyue
        13
    lianyue  
       May 5, 2018 via iPhone
    存二进制 字符串 就好了
    fyyz
        14
    fyyz  
       May 5, 2018 via Android
    就存字符串
    kaneg
        15
    kaneg  
       May 5, 2018 via iPhone
    不管是存字符串还是数字型,都最好格式化成标准形式,以便于在日后使用过程中查找匹配可以应对各种输入形式
    hushao
        16
    hushao  
       Nov 21, 2019
    +1 年,想知道 Livid @Livid 目前研究出来的方案是个啥?
    hanssx
        17
    hanssx  
       Sep 15, 2023
    压缩到最小存储空间,16 位字符,每个字符 8 位,16*8=128 ,正好可以哎,但是每个字符表示 8 位,就会有不可见字符,64 种不同可能,2 的 6 次方,每个字符 6 位,128/6 除以不了。如果按照 64 进制来,128 位,给它补位到能整除的话,132/6=22 ,用 22 位存,末尾补 132-128=4 个零。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1007 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 23:16 · PVG 07:16 · LAX 16:16 · JFK 19:16
    ♥ Do have faith in what you're doing.