我有一个mysql db,其中包含一个表,其中ipv4和ipv6 ip存储为INT(10) UNSIGNED
。要检索 ipv4 IP 地址,我使用函数 INET_NTOA
:
SELECT INET_NTOA( client_ip ) FROM mytable1;
适用于 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 个字节,即 32 位。
IPv6 地址为 128 位。
存储在该列中的任何 IPv6 地址都将被截断,无法恢复。
要在MySQL中存储IPv6地址,请使用VARBINARY(16)
(由INET6_ATON
返回(或BINARY(16)
。