IPv6在MySQL数据库中的存储字段类型

IPv6在MySQL数据库中的存储字段类型

首先,谈谈IPv4在MySQL中的存储。

在数据字段设计中,IPv4的存储,用int类型储存即可。采用的方式是将IPv4看作是256进制,从而转化为int。例如:

192.168.0.1 储存为 192168000001
202.96.128.16 储存为 202096128016
127.0.0.1 储存为 127000000001


接着,IPv4映像地址在IPv6的兼容地址形式。

一个IPv6地址可以将一个IPv4地址内嵌进去,并且写成IPv6形式和平常习惯的IPv4形式的混合体。
IPv6有两种内嵌IPv4的方式:IPv4映像地址和IPv4兼容地址。下面来举例说明。

IPv4的地址192.168.89.9,在IPv6的兼容地址形式为

::ffff:192.168.89.9

或者

0000:0000:0000:0000:0000:ffff:c0a8:5909


然后,介绍一下IPv6的书写形式。

而IPv6采用128位二进制数码表示,有16个字节。下面枚举一些IPv6的例子:

2001:0DB8:0000:0000:0000:0000:1428:0000
2001:0DB8:0000:0000:0000::1428:0000
2001:0DB8:0:0:0:0:1428:0000
2001:0DB8:0::0:0:1428:0000
2001:DB8::1428:0

这些都是合法的IPv6格式,并且他们是等价的。可以看出连续的段位的0可以不写,任意一字节前导0也可以不写。


最后,IPv6在MySQL数据库中的存储字段类型。

在MySQL中,最大的整形bigint也只有8字节,所以如果全部存储IPv6,根本行不通。和IPv4一样,目前MySQL还没有直接支持IPv6。也许将来会推出相应的解决方案,根据目前的情况,自己感觉可以根据自己的实际项目,采用合适的方式存储。

1. varchar类型存储,这样需要8(段)*4(字符)=32个char即可。
2. varbinary,分配8(段)*4(字符)*4(位)=128bits空间。
3. 2*bigint,用两个bigint进行存储。
4. 4*int,4个int进行存储。
以上这几种存储方式,可以适应不同的需求。

参考:http://blog.sina.com.cn/s/blog_6a5e34ad0100zccz.html


5