将 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 十六进制冒号表示转化为二进制表示来存储它。
我正在使用一种简单的方法来获取真实的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 十六进制冒号表示转化为二进制表示来存储它。