欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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`;

mysql 存储ip地址

如果需要找出在某个网段的用户(例如: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 存储ip地址

总结
1.保存ip地址到数据库,使用unsigned int格式,插入时使用inet_aton方法把ip先转为无符号整型,可以节省存储空间。 
2.显示时使用inet_ntoa把整型ip地址转为电地址。 
3.php 使用 ip2long转ip为整型时,需要注意出现负数的问题(如果出现负数:参照之前我写的)