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为整型时,需要注意出现负数的问题(如果出现负数:参照之前我写的这篇

  • 相关阅读:
    如何写一个邮件模板页面
    java集合List,Set,Map等集合
    参悟python元类(又称metaclass)系列实战(二)
    参悟python元类(又称metaclass)系列实战(一)
    对Python"一切皆对象"的小参悟
    Linux设置ntp客户端
    JMeter BeanShell向文件中写入内容
    JMeter处理接口签名(sign)
    JMeter处理动态的签名内容
    多线程总结,ThreadPoolExecutor创建线程池,
  • 原文地址:https://www.cnblogs.com/phpper/p/10220703.html
Copyright © 2011-2022 走看看