≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > MySQL

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

人气:380 时间:2020-07-09

这篇文章主要为大家详细介绍了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

本文来自:http://www.q1010.com/177/10263-0.html

注:关于IP处理函数inet_aton()和inet_ntoa()使用说明的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:MYSQL

您可能感兴趣的文章

  • MySQL的存储过程学习小结 附pdf文档下载
  • MySQL启动与数据库的创建方法[图文]
  • 深入MySQL字符集设置分析
  • 揭秘SQL优化技巧 改善数据库性能
  • MySQL查询字符串替换语句小结(数据库字符串替换)
  • MySQL存储过程异常处理示例代码分享
  • 远程连接MySQL数据库注意事项记录(远程连接慢skip-name-resolve)
  • MySQL存储过程分析
  • MySQL #1062 –Duplicate entry '1' for key 'PRIMARY'
  • MySQL事件查看器使用介绍
上一篇:深入理解MySQL SET NAMES和MySQL(i)_set_charset的区别
下一篇:MySQL的存储过程学习小结 附pdf文档下载
热门文章
  • mysql 修改character_set_server为utf-8的简单示例
  • 解决MySQL丢失文件localhost.localdomain.pid、mysql.sock的示例
  • MySQL 数据类型binary和varbinary的简单示例
  • MySQL:reading initial communication packet问题解决方法
  • MySql 表类型MYISAM、InnoDB区别
  • bash: mysql: command not found 的解决方法
  • MYSQL默认用户名ROOT修改方法
  • MySQL 常用命令菜鸟教程
  • MySQL 使用命令行新建用户并授予权限
  • MySql 数据库物理文件存放位置查看示例
  • 最新文章
    • MySQL查看死锁与解除死锁的简单示例
    • MySQL 慢查询的功能实例
    • MySQL查看死锁与去除死锁的简单示例
    • MySQL找出未提交事务的SQL的简单示例
    • MySQL锁阻塞的的简单示例
    • MySQL中的binary类型使用操作的示例
    • SQL优化教程之in与range查询的简单示例
    • MySQL 的 21 个规范、优化最佳实践!
    • MySQL 字符类型大小写敏感的简单示例
    • 解决mybatis-plus分页传入参数后sql where条件没有limit分页信息的问题

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。