我用一种简单的方法来获得真正的ip。我在这里找到了它:How to get Real IP from Visitor?
IP将存储到数据库中,在某些列宽VARCHAR 15中。我使用长度为15的Varchar,因为我知道ip地址可以是123.456.789.123,它有12个数字和3个点。 / p>
现在......我看到IPv6有更多的字符。我不明白。所有用户都有特定的IPv4,或者可能是某些使用IPv6但不是IPv4的用户?
我需要理解,因为我想优化这一列IP,正如我在这里看到的那样:insert ip into mysql最好将其设为十进制。
如果ip(版本6)的字符数超过15个,如何将此列设为十进制数?
我混淆了......
答案 0 :(得分:3)
要处理和存储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个,如何将此列设为十进制数?
答:不要将列DECIMAL
设为 VARBINARY(16)
,并将IPv4点分十进制表示转换为将IPv6十六进制冒号表示为二进制表示以存储它。