我有一个 mysql 数据库,其中有一个表,其中 ipv4 和 ipv6 ip 存储为 INT(10) UNSIGNED
。
为了检索 ipv4 IP 地址,我使用函数 INET_NTOA
:
从 mytable1 中选择 INET_NTOA( client_ip );
非常适合 ipv4 IP。但所有 ipv6 ip 都会返回:
6.0.0.0
如果我尝试使用函数 INET6_NTOA ( client_ip )
或 INET6_NTOA(UNHEX( client_ip ))
检索 ipv4 和 ipv6 ip,它不起作用,我只是得到输出:
NULL
INET6_NTOA(client_ip)
或者:
NULL
INET6_NTOA(UNHEX( client_ip ))
还有其他方法可以从我的数据库检索 ipv6 IP 吗? 需要在 bash 中执行此操作。
数据库版本:10.2.12-MariaDB MariaDB服务器
最佳答案
INT(10) UNSIGNED
列是 4 bytes ,即 32 位。
IPv6 地址是 128 bits .
您存储在该列中的任何 IPv6 地址都将被截断且无法恢复。
要在 MySQL 中存储 IPv6 地址,请使用 VARBINARY(16)
(由 INET6_ATON
返回)或 BINARY(16)
。
关于mysql - 如果 IPV6 IP 存储在 INT(10) UNSIGNED 中,如何从 mysql 数据库检索它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588678/