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

推荐答案

怎么样:

BINARY(16)

这应该足够有效.

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

UPDATE:

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".

Mysql相关问答推荐

根据当前表列的值,从SQL中的另一个表中获取数据

LaravelEloquent ToSql()缺少连接表

默认情况下,MariaDB是否限制为本地主机?

Python MySQL-无法从数据库中删除行

不分组寻呼

MySQL-如何检测时间戳中的一天

从表中动态删除所有空列

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

如何同时从同一个表中 Select 从 SQL 表中删除行

相关查询 - 在派生表中,我可以有多个嵌套级别吗?

MySQL过滤食谱上的多对多 - 成分表

MYSQL 或 Laravel Eloquent 如何从这个订单中统计细节

如何在mysql select查询中获取两个日期之间的日期列表

在 MySQL 中,我应该 Select 哪种排序规则?

如何使用 phpmyadmin 复制数据库?

从mysql中的大表中快速 Select 随机行

MySQL 实用程序 - ~/.my.cnf 选项文件

BIGINT mysql 性能与 INT 相比

"SELECT COUNT(*)" 很慢,即使有 where 子句

如何在执行 sql 脚本时 echo 打印语句