zoukankan      html  css  js  c++  java
  • mysql 存储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

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

  • 相关阅读:
    20205025模拟
    CDQ分治详解
    点分治详解
    虚树详解
    整体二分详解
    算法学习————线段树合并
    Mvc.ExceptionHandling.AbpExceptionFilter
    小程序前端转换时间格式2021-02-25T12:01:20.254748
    《生命3.0—在亿年的尺度下审视生命的演进》阅读笔记1
    软件杯赛题周总结(1)
  • 原文地址:https://www.cnblogs.com/phpper/p/10220703.html
Copyright © 2011-2022 走看看