IP处理函数inet_aton()和inet_ntoa()使用说明

MYSql的IP对int的转换函数

select inet_aton(ip) from table_name;

网络地址:

192.168.33.123

每一个值最大不会越过255,也就是十六进制的FF,两个Byte刚好表示的最大值是255,

这样子,就可以用一个32位的整形来保存这个地址

192 168 33 123

1100 0000 1010 1000 0010 0001 0111 1011

把这些二进制合在一起就是32位的数了

11000000101010000010000101111011

十进制为

3232244091

* INET_ATON(expr)

给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

mysql> SELECT INET_ATON('209.207.224.40');

-> 3520061480

产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2^24 + 207×2^16 + 224×2^8 + 40 进行计算。

INET_ATON() 也能理解短格式 IP 地址:

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');

-> 2130706433, 2130706433

注释: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至 2147483647 (即, INET_ATON('127.255.255.255') 所返回的值)。请参见11.2节,“数值类型”。

* INET_NTOA(expr)

给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。

mysql> SELECT INET_NTOA(3520061480);

-> '209.207.224.40'

在做项目时,并不知道这两个函数,所以对IP的处理都是自己写的函数,但是使用时效率却是十分的差,下面函数是把IP转化成整数:

复制代码 代码如下:

CREATE FUNCTION `transIPtoInt`(ip char(31)) RETURNS char(31)

begin

DECLARE value1 CHAR(10);

DECLARE value2 CHAR(10);

DECLARE value3 CHAR(10);

DECLARE value4 CHAR(10);

set value1=SUBSTRING_INDEX(ip, '.', 1);

set value2=SUBSTRING_INDEX(ip, '.', 2);

set value2=SUBSTRING_INDEX(value2, '.', -1);

set value3=SUBSTRING_INDEX(ip, '.', -2);

set value3=SUBSTRING_INDEX(value3, '.', 1);

set value4=SUBSTRING_INDEX(ip, '.', -1);

set value1=value1<<24;

set value2=value2<<16;

set value3=value3<<8;

return value1+value2+value3+value4;

end;

为了IP地址比较的方便,我还写了一个把IP地址中每一段都补足三位的函数,如下:

复制代码 代码如下:

CREATE FUNCTION `fillIp`(ip char(31)) RETURNS char(31)

begin

DECLARE value1 CHAR(31);

DECLARE value2 CHAR(10);

DECLARE value3 CHAR(10);

DECLARE value4 CHAR(10);

set value1=SUBSTRING_INDEX(ip, '.', 1);

set value2=SUBSTRING_INDEX(ip, '.', 2);

set value2=SUBSTRING_INDEX(value2, '.', -1);

set value3=SUBSTRING_INDEX(ip, '.', -2);

set value3=SUBSTRING_INDEX(value3, '.', 1);

set value4=SUBSTRING_INDEX(ip, '.', -1);

set value1=LPAD(value1,3,'0');

set value2=LPAD(value2,3,'0');

set value3=LPAD(value3,3,'0');

set value4=LPAD(value4,3,'0');

return CONCAT(value1,'.',value2,'.',value3,'.',value4);

end;

以下是一些补充* INET_ATON(expr)

给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

mysql> SELECT INET_ATON('209.207.224.40');

-> 3520061480

产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40 进行计算。

INET_ATON() 也能理解短格式 IP 地址:

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');

-> 2130706433, 2130706433

注释: 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT列, 则相应的第一个八位组大于127的IP 地址值会被截至 2147483647 (即, INET_ATON('127.255.255.255') 所返回的值)。请参见MySQL文档中的“数值类型”。

* INET_NTOA(expr)

给定一个数字网络地址 (4 或 8 比特),返回作为字符串的该地址的电地址表示。

*

mysql> SELECT INET_NTOA(3520061480);

-> '209.207.224.40'

--------------------------------------------------------------------------------------------------

整型字段的比较比字符串效率高很多,这也符合一项优化原则:字段类型定义使用最合适(最小),最简单的数据类型。

inet_aton()算法,其实借用了国际上对各国IP地址的区分中使用的ip number。

a.b.c.d 的ip number是:

a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方。

--------------------------------------------------------------------------------------------------

利用mysql的内置函数处理时间戳问题

eg : select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');

结果: 2004 3rd August 03:35:48 2004

相关阅读:

用PHP连接MySQL代码的参数说明

jquery事件机制扩展插件 jquery鼠标右键事件。

jquery对表单操作2

ie7 0day当中的shellcode的escape+xor21加密

Linux下pptp做nat,持久连接到另一网络

微软SQL Server密码管理的六个危险判断

[vbs]每一行的最后一个字符转换成_

FireFox与IE 下js兼容触发click事件的代码

jQuery.Validate 使用笔记(jQuery Validation范例 )

带你轻松接触Oracle数据库的日历

解决MySQL启动时万恶的的“1067”错误

PHP教程:PHP开发网站代码编写规范

BSD家族大观 --2. OpenBSD

JSP/Servlet/JSF:自定义标签

inet_aton mysql_MySQL_IP处理函数inet_aton()和inet_ntoa()使用说明,MYSql的IP对int的转换函数 select i - phpStudy...相关推荐

  1. mbstowcs 和 wcstombs函数:C语言提供的宽字符和多字节字符转换函数

    C语言中的多字节字符与宽字符 字符型char只占八位,存储ascii码的,而宽字符型是为了存储多国语言的代码unicode,包括中文,法语德语什么的,8位256种不够用了 C语言原本是在英文环境中设计 ...

  2. SQLServer bigint 转 int带符号转换函数(原创)

    有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常.警告状态)使用了位运算机制在一个int型中存储. 现在监控日志数据量非常大(亿级别)需要对数据按每小时.每天进行聚合,供在线 ...

  3. PHP dechex,PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin() 函数,如下实例 echo decbin(12); //输出 1100 echo decbin(26); / ...

  4. PHP Mysql两组时间戳、日期转换函数

    PHP中日期的显示与存储有UNIX时间戳和格式化日期两种方式.Unix时间戳存储.处理方便,但是不直观:格式化日期直观,但是处理起来不如Unix时间戳那么自如.所以数据库中对于日期类型字段的存储采用时 ...

  5. java inet aton_IP处理函数inet_aton()和inet_ntoa()使用说明

    MYSql的IP对int的转换函数 select inet_aton(ip) from table_name; 网络地址: 192.168.33.123 每一个值最大不会越过255,也就是十六进制的F ...

  6. R语言大小写转换函数(tolower, toupper, casefold,chartr)实战

    R语言大小写转换函数(tolower, toupper, casefold,chartr)实战 目录 R语言大小写转换函数(tolower, toupper, casefold,chartr)实战 # ...

  7. mysql中的dateDayOfYear_Mysql 常用的时间日期及转换函数小结

    本文主要是总结一些常用的在实际运用中常用的一些mysql时间日期以及转换的函数 1.now()  :返回当前日期和时间 select now(); //2018-04-21 09:19:21 2.cu ...

  8. MYSQL 获取当前日期及日期格式,和常用时间转换函数

    经过多次尝试本人的目标完成: select newworkorder.WorkOrderNum,newworkorder.ProjectCode, newworkorder.WorkEstComDat ...

  9. C++专题:异常处理与转换函数,智能指针,STL模板

    目录 异常处理 转换函数 智能指针 STL标准模板库 异常处理 什么是异常? 程序中常见的错误分为两大类:编译时错误和运行时错误.编译时的错误主要是语法错误,如关键字拼写错误.语句末尾缺分号.括号不匹 ...

最新文章

  1. pyhon字典后跟中括号
  2. P1433 吃奶酪(状压dp)
  3. 微软为无服务器架构引入新API管理消费层
  4. 在从1到n的正数中1出现的次数
  5. rem适配的浏览器_移动端网页布局适配rem方案小结
  6. 高中计算机学业水平测试知识点总结,高中生物学业水平测试知识点总结
  7. centos7编写shell批处理文件和执行方法
  8. 经济基础知识(中级)【4】
  9. 九、奈氏准则和香农定理
  10. FFmpeg源代码简单分析-其他-日志输出系统(av_log()等)
  11. 南京柳树湾与云南汉族人
  12. Spring Boot事务
  13. 2022最新200道软件测试面试题
  14. 新员工加入企业微信的2种方法:邀请和被邀请
  15. 如何通过excel批量生成word文件?
  16. 中高级JAVA工程师-面试题汇总
  17. 题目错题记录表mysql设计_基于Web2.0的跨平台电子错题本功能的设计与实现
  18. 【论文阅读】DCAN: Deep Contour-Aware Networks for Accurate Gland Segmentation
  19. 新闻分页---新闻发布系统
  20. unity3D 2019.3版本开发的扫雷

热门文章

  1. 【ubuntu拷贝目录】cp: omitting directory”错误的解释和解决办法
  2. 解决H5在移动端overflow:scroll滚动条默认不显示和滚动后消失的问题
  3. C语言逻辑语句问题集锦
  4. U1C2 文本预处理
  5. Mysql教程(Windows)
  6. 微机原理与接口技术总结
  7. 【渝粤教育】电大中专跨境电子商务理论与实务 (4)作业 题库
  8. 独家丨DeepMind科学家、AlphaTensor一作解读背后的故事与实现细节
  9. 公钥基础设施 (Public-key infrastructure PKI)
  10. 基于Python+SQLSERVER的快递业务管理系统的设计与实现