在MySQL 5.6中,添加了一些与IPv6相关的函数。
我想知道为什么新函数IS_IPV4_COMPAT(expr)使用废弃的RFC-4291来检查给定的binary地址是否是与IPv6 4兼容的有效IPv6地址。
MySQL文档说:
此函数将以数字形式表示的IPv6地址作为二进制字符串,由INET6_ATON()返回。如果参数是有效的IPv6 4兼容的IPv6地址,则返回1,否则返回0。IPv4 4兼容地址具有::ipv4_address格式。
mysql> SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.5.9'));
-> 1
mysql> SELECT IS_IPV4_COMPAT(INET6_ATON('::ffff:10.0.5.9'));
-> 0But the [RFC-4291](https://www.rfc-editor.org/rfc/rfc4291#section-2.5.5) says:
+--------------------------------------+--------------------------+
| 80 bits | 16 | 32 bits |
+--------------------------------------+--------------------------+
|0000..............................0000|0000| IPv4 address |
+--------------------------------------+----+---------------------+
> The "IPv4-Compatible IPv6 address" is now deprecated because the current IPv6 transition mechanisms no longer use these addresses. New or updated implementations are not required to support this address type.
+--------------------------------------+----+---------------------+
| 80 bits | 16 | 32 bits |
+--------------------------------------+--------------------------+
|0000..............................0000|FFFF| IPv4 address |
+--------------------------------------+----+---------------------+
> See [RFC4038](https://www.rfc-editor.org/rfc/rfc4038) for background on the usage of the "IPv4-mapped IPv6 address".
**Which format should I use to store IPv4 addresses within a IPv6 context?**发布于 2013-10-24 13:46:14
在IPv4网络中有两种解决IPv6的方法。“映射”地址方案和“兼容性”地址。RFC-4291讨论了两者。MySQL允许您分别查询这两种情况。自那时以来,compat计划已被否决。
IS_IPV4_COMPAT()用于compat地址方案。尽管这是不推荐的,但是有实现它的实现,并且仍然在使用中,人们可能需要将它们存储在数据库中。
如果您想要映射地址方案的行为,请使用IS_IPV4_MAPPED。
您应该使用哪种格式取决于您需要将它们用于什么。例如,如果您存储计算机配置输入的地址,则需要知道它们支持哪种格式。如果您不知道,请使用更新的当前格式(::ffff:10.0.5.9)
如果您需要支持这两种格式,请使用IS_IPV4_COMPAT(field) or IS_IPV4_MAPPED(field)进行查询。
https://stackoverflow.com/questions/19567431
复制相似问题