在MySQL中没有直接提供IP类型字段,但有两个函数可以把IP与最大长度为10位数字类型互转,所以使用unsigned int类型存储IP比varchar类型存储IP地址性能要提升很多,减少不少空间(因为varchar是可变长形,需要多余的一个字节存储长度),另外int型在逻辑运算上要比varchar速度快。
mysql实现
IP转数字函数 inet_aton()
mysql> select inet_aton( '255.255.255.255' );//输出4294967295
所以IP的表字段可以设置为INT(10)就好,如果IP获取不到可以直接存0。
数字转IP函数 inet_ntoa()
mysql> select inet_ntoa(4294967295);//输出255.255.255.255
注意,0转换为 0.0.0.0
php实现
****IP转数字函数 ip2long()**
<?php echo sprintf("%u\n", ip2long("157.23.56.90"));//输出2635544666
数字转IP函数 long2ip()
<?php$ip_long = 2635544666;echo long2ip($ip_long) . "\n";//输出157.23.56.90
网友评论