我有一个带有表的mysql数据库,其中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,它不起作用,我只是得到输出:
NULL
INET6_NTOA ( client_ip )
OR:
NULL
INET6_NTOA(UNHEX( client_ip ))
还有其他方法可以从我的数据库中检索ipv6 ip吗? 需要在bash中执行此操作。
数据库版本:10.2.12-MariaDB MariaDB服务器
答案 0 :(得分:2)
INT(10) UNSIGNED
列为4 bytes,即32位。
IPv6地址为128 bits。
您在该列中存储的所有IPv6地址都将被截断,无法恢复。
要在MySQL中存储IPv6地址,请使用VARBINARY(16)
(由INET6_ATON
)或BINARY(16)
返回。