将IP存储到mysql数据库

时间:2015-06-11 00:12:47

标签: php mysql ip ipv6 ipv4

我用一种简单的方法来获得真正的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个,如何将此列设为十进制数?

我混淆了......

1 个答案:

答案 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十六进制冒号表示为二进制表示以存储它。