为了账号安全,请及时绑定邮箱和手机立即绑定

如何在关系数据库中存储IPv6兼容地址

如何在关系数据库中存储IPv6兼容地址

白衣染霜花 2019-10-18 14:42:32
我怎么做?现在,将不会使用IPv6,但是我需要设计应用程序以使其支持IPv6。有必要在MySQL数据库中存储IP地址和CIDR块(也是BGP NLRI,但这是另一回事)。我一直将INT用于IPv4 +将TINYINT用于masklen,但是IPv6是128位。哪种方法最适合呢?2xBIGINT?CHAR(16)用于二进制存储?CHAR(39)用于文本存储?8xSMALLINT在专用桌子上?你会推荐什么?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

如果您倾向于使用char(16),请改用binary(16)。binary(n)没有排序规则或字符集的概念(或者,它是字符集/排序规则为'binary'的char(n))。mysql中char的默认值是latin1_swedish_ci,这意味着它将尝试不区分大小写的排序和对latin1中有效代码点的字节值进行比较,这将导致各种意想不到的问题。


另一种选择是使用无符号十进制(39,0)零填充,效率不如两个bigints(十进制将在当前版本的mysql中每9位使用4个字节),但允许您将其全部保留在一个列中并打印很好。


查看完整回答
反对 回复 2019-10-18
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

请注意,如标准C标头中的INET6_ADDRSTRLEN所定义,IPv6地址的最大长度(包括作用域标识符)为46个字节。对于Internet使用,您应该可以忽略区域标识符(%10,#eth0等),但要知道getaddrinfo何时返回比预期更长的结果。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 853 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信