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

标签 mysql mariadb

我有一个 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/

相关文章:

每行的 MYSQL COUNT(*)

MySQL:使用删除索引更改忽略表

mysql - 关于重复键更新 - MariaDB

mysql - 多次更新mysql

mysql - 由于 "TIMESTAMP with implicit DEFAULT value is deprecated"错误,我无法启动 Mysql 5.6 服务器?

mysql - 模板化 MySQL 的 my.cnf 以在 Puppet 中设置

mysql - 替换在 mysql 和 mariadb 中不起作用的正则表达式

mysql - 添加列时影响 0 行

mysqldump 不转储存储过程

php - 如何从数据库中的 PHP 序列化数组获取价格数据