mysql 存储ip地址
程序员文章站
2022-06-25 08:20:40
mysql提供了两个方法来处理ip地址: 插入数据前,先用inet_aton把ip地址转为整型,可以节省空间。 显示数据时,使用inet_ntoa把整型的ip地址转为电地址显示即可。为社么这样存?,性能上的提示比直接存储字符串的IP要高出很多。示例: 插入几条数据: 查询显示地址: 如果需要找出在某 ......
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