mysql IP 存储

利用mysql的inet_aton()和inet_ntoa()函数存储IP地址
例如:create table mba (ip int unsigned, name char(1));
      insert into mba values(inet_aton('192.168.1.200'), 'A'),(inet_aton('200.100.30.241'), 'B');
   
select * from mba where ip = inet_aton('192.168.1.200');
+------------+------+
| ip         | name |
+------------+------+
| 3232235976 | A    |
+------------+------+
1 row in set (0.00 sec)

select inet_ntoa(ip) from  mba;
+----------------+
| inet_ntoa(ip)  |
+----------------+
| 192.168.1.200  |
| 200.100.30.241 |


当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_ntoa()函数,来存储IP地址效率很高,适用unsigned int 就可以满足需求,不需要使用bigint,只需要4个字节,节省存储空间,同时效率也高很多。

整型字段的比较比字符串效率高很多,这也符合一项优化原则:字段类型定义使用最合适(最小),最简单的数据类型。

inet_aton()算法,其实借用了国际上对各国IP地址的区分中使用的ip number。

a.b.c.d 的ip number是:

a * 256的3次方  +  b * 256的2次方 +  c * 256的1次方 + d * 256的0次方。

你可能感兴趣的:(mysql)