mysql - 在 MySQL 中存储 IPv6 地址

正如“ipv6-capable inet_aton and inet_ntoa functions needed”中所要求的,目前没有用于存储 IPv6 地址的 MySQL 函数。存储/插入的推荐数据类型/功能是什么? (我不打算将它们存储为字符串)。我也不想将 IPv6 地址分成 2 个 INT。

最佳答案

怎么样:

BINARY(16)

这应该足够有效。

目前没有在 MySQL 服务器中将文本 IPv6 地址从/转换为二进制的功能,如该错误报告中所述。您需要在您的应用程序中执行此操作,或者可能在 MySQL 服务器中创建一个 UDF(用户定义函数)来执行此操作。

更新:

MySQL 5.6.3 支持 IPv6 地址,请参阅以下内容:“INET6_ATON(expr)”。

数据类型是 VARBINARY(16) 而不是我之前建议的 BINARY(16)。唯一的原因是 MySQL 函数适用于 IPv6 和 IPv4 地址。 BINARY(16) 适用于仅存储 IPv6 地址并节省一个字节。处理 IPv6 和 IPv4 地址时应使用 VARBINARY(16)

旧版本 MySQL 和 MariaDB 的实现,请参见以下内容:“EXTENDING MYSQL 5 WITH IPV6 FUNCTIONS”。

https://stackoverflow.com/questions/6964143/

相关文章:

sql - 在 MySQL 中重命名外键列

mysql - 如何将两列与mysql中的现有列名合并为一?

mysql - 将 MySQL 数据库置于版本控制之下?

mysql - 如何在 MySQL 中获得减去 6 周的时间戳?

mysql - 何时在 mysql 中使用 TEXT 而不是 VARCHAR

mysql - 我应该只坚持使用 AWS RDS 自动备份还是数据库快照?

php - 在 Android 上运行 AMP (apache mysql php)

sql - 如何选择一个空的结果集?

mysql - 为什么 MySQL 会在 FULL OUTER JOIN 上报告语法错误?

mysql - 拒绝访问;您需要(至少一个) super 权限才能执行此操作