将IP存储到mysql数据库中。

13 浏览
0 Comments

将IP存储到mysql数据库中。

我使用了一种简单的方式来获取真实的IP地址。我在这里找到了方法:如何获取访问者的真实IP地址?

IP地址将会存储在数据库中的某个VARCHAR 15列中。我选择使用长度为15的VARCHAR,因为我知道IP地址可以是123.456.789.123,它由12个数字和3个点组成。

现在...我发现IPv6的长度更长。我不太理解。所有用户都有特定的IPv4地址吗?可能有一些用户只有IPv6而没有IPv4吗?

我需要理解这个,因为我想要优化这个IP列,就像我在这里看到的:将IP地址插入MySQL中,最好将其转换为十进制。

如果IP地址(版本6)超过15个字符,我应该如何将这个列转换为十进制?

我有点困惑...

0
0 Comments

问题的原因是,当存储IPv6地址时,ip列的长度可能超过15个字符,因此不能将该列定义为DECIMAL类型。解决方法是将列定义为VARBINARY(16)类型,并将IPv4的点分十进制表示和IPv6的十六进制表示都转换为二进制表示来存储。

此外,还有一个相关问题,就是如何将VARBINARY(4)类型的列转换为整数。通过测试发现,CAST和CONVERT函数无法实现转换,而唯一有效的方法是使用CAST(CONV(HEX(binfield),16,10) as UNSIGNED)。另外,也可以使用INET6_NTOA函数将BINARY(4)类型的列转换为点分十进制表示,然后再使用INET_ATON函数将其转换为整数。

要在MySQL数据库中存储IP地址,可以使用VARBINARY(16)数据类型,并根据需要进行转换。

0