首页 > 解决方案 > (inet6_aton()) 的奇怪问题,有时返回 null?SQL - 玛丽亚数据库

问题描述

有人可以解释这里发生了什么吗?为什么名称为sara的行在IP_address 中返回空值?它与其他代码完全相同吗?

这条线完美地工作:

INSERT INTO Users VALUES ("","Nina", "Bertilsson", "nina-hej@bertilson.test.se", (inet6_aton('46.246.78.163')), now(), "nina", "password");

但这会使用 inet6_aton 函数为 IP_Address 返回 NULL:

INSERT INTO Users VALUES ("","Sara", "Andersson", "andersson@sara.se", (inet6_aton('46.246.65.892')), now(), "sara", "password");

表格如下:

在此处输入图像描述

我正在将 XAAMP 与 mariaDB 一起使用。

标签: mysqlsqlmariadb

解决方案


你可以这样简化你的问题:

为什么以下查询给出结果:

SELECT HEX(inet6_aton('46.246.78.163'));
+----------------------------------+
| HEX(inet6_aton('46.246.78.163')) |
+----------------------------------+
| 2EF64EA3                         |
+----------------------------------+

而这个没有:

SELECT HEX(inet6_aton('46.246.65.892'));
+----------------------------------+
| HEX(inet6_aton('46.246.65.892')) |
+----------------------------------+
| NULL                             |
+----------------------------------+

这是因为第一个是有效的 IPv4 地址:

SELECT is_ipv4('46.246.78.163');
+--------------------------+
| is_ipv4('46.246.78.163') |
+--------------------------+
|                        1 |
+--------------------------+

但第二个不是:

SELECT is_ipv4('46.246.65.892');
+--------------------------+
| is_ipv4('46.246.65.892') |
+--------------------------+
|                        0 |
+--------------------------+

第二个的问题在于最后一个点之后的数字 - 892。它不能超过 255,但确实如此。


推荐阅读