MYSQL数据库IP处理函数inet_aton()和inet_ntoa()使用说明
发布时间:2020-12-12 02:41:07 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL数据库IP处理函数inet_aton()和inet_ntoa()使用说明》要点: 本文介绍了MYSQL数据库IP处理函数inet_aton()和inet_ntoa()使用说明,希望对您有用。如果有疑问,可以联系我们。 MYSql的IP对int的转换函数 select inet_aton(ip) from table_name; 网络地
《MYSQL数据库IP处理函数inet_aton()和inet_ntoa()使用说明》要点: 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 value1=LPAD(value1,3,'0'); set value2=LPAD(value2,'0'); set value3=LPAD(value3,'0'); set value4=LPAD(value4,'0'); return CONCAT(value1,value2,value3,value4); end; 以下是一些补充 * INET_ATON(expr) 给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,数字依照 209×2563 + 207×2562 + 224×256 + 40 进行计算. INET_ATON() 也能理解短格式 IP 地址: mysql> SELECT INET_ATON('127.0.0.1'),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 《MYSQL数据库IP处理函数inet_aton()和inet_ntoa()使用说明》是否对您有启发,欢迎查看更多与《MYSQL数据库IP处理函数inet_aton()和inet_ntoa()使用说明》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Mysql学习Mysql 数据库死锁过程分析(select for update)
- MYSQL数据库MYSQL中有关SUM字段按条件统计使用IF函数(case)
- Mysql实例win2003服务器下配置 MySQL 群集(Cluster)的方法
- Mysql必读[MySQL binlog]mysql如何彻底解析Mixed日志格式的
- MYSQL教程MySQL的备份工具mysqldump的基础使用命令总结
- MYSQL教程Mysql数据库性能优化二
- MYSQL数据库MySQL半同步复制
- Mysql必读打开phpmyadmin显示高级功能尚未完全设置部分功能
- Mysql学习MySQL 5.7.17压缩版安装笔记
- 获取表的primary key