如果它们存储在INT(10)UNSIGNED中,如何从mysql数据库中检索IPV6 ip#s

时间:2018-02-02 18:19:41

标签: mysql mariadb

我有一个带有表的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服务器

1 个答案:

答案 0 :(得分:2)

INT(10) UNSIGNED列为4 bytes,即32位。

IPv6地址为128 bits

您在该列中存储的所有IPv6地址都将被截断,无法恢复。

要在MySQL中存储IPv6地址,请使用VARBINARY(16)(由INET6_ATON)或BINARY(16)返回。