mysql提供了两个方法来处理ip地址:
inet_aton 把ip转为无符号整型(4-8位) inet_ntoa 把整型的ip转为电地址
插入数据前,先用inet_aton把ip地址转为整型,可以节省空间。
显示数据时,使用inet_ntoa把整型的ip地址转为电地址显示即可。为社么这样存?,性能上的提示比直接存储字符串的ip要高出很多。
示例:
create table `t_user` ( `id` int(11) not null auto_increment, `name` varchar(15) default null comment '用户名', `ip` bigint(20) default null comment 'ip地址', primary key (`id`) ) engine=innodb default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;
插入几条数据:
insert into `t_user` ( `id`, `name`, `ip` ) values ( 2, 'babala', inet_aton( '127.0.0.1' ) ), ( 3, 'maly', inet_aton( '192.168.1.1' ) ), ( 4, 'kaven', inet_aton( '111.175.7.143' ) );
查询显示地址:
select id,name,inet_ntoa(ip) as ip from `t_user`;
如果需要找出在某个网段的用户(例如:192.168.1.1 ~ 192.168.1.100),可以利用php的ip2long方法,把ip地址转为整型,再进行比较。
$ip_start = '192.168.1.1'; $ip_end = '192.168.1.100'; echo sprintf('%u',ip2long($ip_start)).php_eol; // 3232235777 echo sprintf('%u',ip2long($ip_end)).php_eol; // 3232235876
如对本文有疑问, 点击进行留言回复!!
MySQL-关系代数-并、交、差、等值连接、自然连接、左连接。。。
【MySQL牛客】10.获取所有非manager的员工emp_no
网友评论