将 IP 存储到 mysql 数据库中

Store IP into mysql database

我正在使用一种简单的方法来获取真实的ip。我在这里找到它:How to get Real IP from Visitor?

IP 将存储到数据库中,列宽为 VARCHAR 15。我使用长度为 15 的 Varchar,因为我知道 IP 地址可以是 123.456.789.123,它有 12 个数字和 3 个点。

现在...我看到 IPv6 有更多的字符。我不明白。所有用户都有特定的 IPv4,或者可能是某些用户使用 IPv6 而不是 IPv4?

我需要理解,因为我想优化IP这一列,正如我在这里看到的:insert ip into mysql最好是十进制。

如果 ip(版本 6)可以超过 15 个字符,我应该如何将此列设为十进制?

我很困惑...

要处理和存储 IPv4 和 IPv6 地址,您可以使用数据类型 VARBINARY(16)

在 5.6 版中,MySQL(终于!)引入了 IPv6 地址的转换函数:INET6_ATON,因此您不必在应用程序中进行转换。

如果你只处理IPv4地址,你可以继续使用INET6_ATON函数,BINARY(4)是一个适合存储它的数据类型。

方便的是,还可以使用反函数将二进制表示形式转换回点分十进制形式(对于 IPv4 地址)或十六进制冒号形式(对于 IPv6 地址)。

参考:https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton

问:如果 ip(版本 6)可以超过 15 个字符,我应该如何将此列设为十进制?

A: 不要将列设为 DECIMAL,将其设为 VARBINARY(16),并将两者都转换将 IPv4 点分十进制表示,以及 IPv6 十六进制冒号表示转化为二进制表示来存储它。