在MySQL数据库中,将IPv4、IPv6地址作为字符串存储的理想大小应该是多少.varchar(32)是否足够?

推荐答案

Assuming textual representation in a string :

  • IPv4为15个字符(xxx.xxx.xxx.xxx格式,12+3)
  • 45 characters用于IPv6

这是字符串的最大长度.

Alternatives to storing as string:

  • IPv4是32位的,所以可以容纳4字节的MySQL数据类型就可以了,通常使用INT UNSIGNED以及INET_ATONINET_NTOA来处理从地址到数字以及从数字到地址的转换
SELECT INET_ATON('209.207.224.40');
        -> 3520061480

SELECT INET_NTOA(3520061480);
        -> '209.207.224.40'
  • 不幸的是,对于IPv6,MySQL没有16字节的数据类型,但是可以将IPv6转换为规范形式,然后将其拆分为2BIGINT(8字节),但是这将使用两个字段.

Mysql相关问答推荐

MySQL没有使用S隐式附加到此二级索引的主键

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

在联合查询中使用GROUP BY和ORDER BY

左联接重复问题

根据现有行 Select 月份日期

在 mySQL 中计算每日数组的每周指标

在 MYSQL 8 中的 JSON 字段上的 SELECT 中返回所有键及其数组项

MySQL Procedure 变量在 count(*) 上接收 null

获取 TEXT 类型行的百分比

访问 nodejs、mysql 和 json 中的嵌套对象数组

MySQL IF() 函数根据指定条件执行代码块

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

为什么 ORDER BY 'id' 'desc' 不返回语法错误?

最好的 MySQL 性能调优工具?

PHP PDO 与普通 mysql_connect

如何通过 mysql workbench 将数据导入 mysql 数据库?

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

如何通过一个语句描述数据库中的所有表?

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'

获取最后一组不同的记录