当前位置: 首页 > 面试题库 >

在MySQL中存储IPv6地址

阎麒
2023-03-14
问题内容

正如“具有ipv6功能的inet_aton和inet_ntoa功能所需
”中所要求的那样,当前没有用于存储IPv6地址的MySQL函数。建议用于存储/插入的数据类型/功能是什么?(我不打算将它们存储为字符串)。我也不想将IPv6地址分为2个INT。


问题答案:

怎么样:

BINARY(16)

那应该足够有效。

如该错误报告中所述,当前在MySQL服务器中没有将文本IPv6地址从二进制转换为二进制的功能。您需要在应用程序中执行此操作,或者可能需要在MySQL服务器中创建UDF(用户定义的函数)来执行此操作。

更新:

MySQL 5.6.3支持IPv6地址,请参见以下内容:“
INET6_ATON(expr) ”。

数据类型VARBINARY(16)不是BINARY(16)我之前建议的那样。这样做的唯一原因是MySQL函数可同时用于IPv6和IPv4地址。BINARY(16)仅存储IPv6地址并节省一个字节就可以了。VARBINARY(16)同时处理IPv6和IPv4地址时应使用。

对于旧版本的MySQL和MariaDB的实现,请参见以下内容:“ 使用IPV6功能扩展MYSQL
5

”。



 类似资料:
  • 问题内容: 在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数-但这仅适用于IPv4。但是IPv6呢? 我知道一个用于IPv6 IP的php函数,但是在Windows上的PHP <Version 5.3上不起作用 问题答案: 可以将点分十进制IPv4地址转换为整数,最大大小为32位。IPv6地址是128位。由于128位不适合PHP int,因此在PHP中使用它会很

  • 问题内容: 我怎么做? 现在,将不会使用IPv6,但是我需要设计应用程序以使其支持IPv6。有必要在MySQL数据库中存储IP地址和CIDR块(也是BGP NLRI,但这是另一回事)。我一直将INT用于IPv4 +将TINYINT用于masklen,但是IPv6是128位。 哪种方法最适合呢??用于二进制存储?用于文本存储?在专用桌子上? 你会推荐什么? 问题答案: 我不确定哪款MySQL 是 正

  • 问题内容: 我正在尝试以有效的方式将IPv6地址存储在MySQL 5.0中。我已经阅读了与此相关的其他问题,例如这个。该问题的作者最终选择了两个BIGINT字段。我的搜索还发现了另一个常用的机制:使用DECIMAL(39,0)存储IPv6地址。我对此有两个问题。 与其他方法(例如2 * BIGINT)相比,使用DECIMAL(39,0)有什么优缺点? 如何将inet_pton()返回的二进制格式(

  • 我正在尝试的是: 我有一个结构: 编辑二:我目前最好的尝试 但现在我不知道如何打印ip和端口

  • 问题内容: 在MySQL数据库中以字符串形式存储IPv4,IPv6地址的理想大小应该是多少。varchar(32)是否足够? 问题答案: 假设文本表示为字符串: IPv4 15个字符(格式,12 + 3分隔符) IPv6的45个字符 这些是字符串的最大长度。 另存为字符串的替代方法: IPv4是32位,因此可以容纳4个字节的MySQL数据类型可以做到,使用和共同使用并处理从地址到数字以及从数字到地

  • 问题内容: 经过一番彻底的搜索之后,我注意到PHP中缺少处理IPv6]的功能。为了我个人的满意,我创建了一些功能来帮助过渡。 该功能是此处提出的临时解决方案:如何在关系数据库中存储IPv6兼容地址。它将IP分成两个整数,并以数组形式返回它们。 对于这些函数,我通常通过首先调用此函数来实现它们: 有人请告诉我,如果我在这里重新发明轮子,或者我做错了什么。 此实现将IPv4转换为IPv6。它不涉及的任