今天,一同事跑来问我,数据库应该用什么来保存IP地址,平时看到的都是字符串。
答曰:有钱任性!要么就像马云粑粑说的,开发心里受委屈了!开个玩笑,咱谈正事!
其实,日常开发中,大多数新手保存IP地址时会创建一个VARCHAR类型的字段以字符串形式去保存的IP,而不是以无符号整型的方式去存放IP地址。这不仅浪费了存储空间,也降低了查询的效率。
实际上,我们只需要用UNSIGNED INT就可以保存IP地址了,不仅效率提升了,还可以支持范围查询,非常方便!
一、MySQL的inet_aton与inet_ntoa
inet_aton可以把字符串IP地址转为整型存储;
inet_ntoa则是把数据库里整型IP地址转为字符串IP;
二、Python中IP地址的转换
py的socket模块同样提供了inet_aton和inet_ntoa
例子:
注意:需要导入相关socket模块和struct模块
三、PHP中IP地址的转换
PHP中也有两个转换函数:
ip2long:将字符串类型IP地址转为整型IP地址
long2ip:将整型IP地址转为字符串类型IP地址
例子:
很简单,只是程序计算有时会出现负数,还需要使用u%格式化一下!
至于价钱,有人说用decimal类型,有人说bigint类型,到底用哪种,看完以上内容,大家说说看,用什么类型存储最好?
閱讀更多 架構之美 的文章