问题 在mysql表中存储IP地址的理想数据类型是什么? [重复]


可能重复:
我应该为MySQL存储什么类型的IP地址? 

一种数据类型,可以同时容纳IPv4和IPv6地址。我想存储IP地址,以限制一个人可以在我的网站上使用他/她的机器制作的配置文件数量。


4361
2017-11-16 19:14


起源

我会建议整数,然后解析它 - Eric Frick
只有IPv4或IPv6?只是一个IP或它的子网掩码? - Martijn
在推荐varchar ... wat abt的一些类似主题? - Robbie Dc
IPv4和IPv6,只有IP地址 - Robbie Dc
我是第二个整数推荐。例如,127.000.000.001 as string与127.0.0.1相同。存储为字符串,您需要执行额外的处理以检查地址 - Sparky


答案:


IPv4地址使用32位(4字节),IPv6地址使用128位(16字节)。因此,您可以将其二进制表示存储在中 BINARY(16) 要么 VARBINARY(16) 领域。

另请参阅我对该问题的回答 存储在mysql数据库中的IP地址。它还提供注释,为什么你会选择一个而不是另一个。


8
2017-11-16 19:28



存储和检索工作很酷......但我不确定它是否会对我在问题中提到的预期目的起作用 - Robbie Dc
varbinary(16) 似乎是最好的选择。 INET6_ATON('172.32.x.x') 可以将IPv4和IPv6地址转换为 blob。可以使用相同的转换回来 INET6_NTOA。在v4和v6之间不需要处理代码;至少用于存储和检索。 - Tirtha R
如何将这个varbinary翻译成可读的形式? - bansal
@Abhi有许多语言的实用功能,例如在PHP中 inet_pton/inet_ntop - knittl


您可以使用UNSIGNED INT并使用 INET_ATON 和 INET_NTOA 编码和解码它。


3
2017-11-16 19:25



这对v4和v6都有效吗? - Robbie Dc


trie数据类型是最佳的。该类型存在未压缩和压缩的数据结构。


0
2017-11-16 19:20