IP处理功能inet_aton()和inet_ntoa()使用说明
选择inet_aton(IP)从table_name;
网络地址:
192.168.33.123
每个值的最大值不交叉255,即十六FF,而两个字节正好是255的最大值。
这样,您就可以用32位的塑料来保存地址了。
一百九十二亿一千六百八十三万三千一百二十三
1100000010101000 0010000101111011
将这些二进制文件保持在一起是32位的数目。
11000000101010000010000101111011
小数
三十二亿三千二百二十四万四千零九十一
* inet_aton(expr)
点地址(如127.0.0.1)作为一个字符串的一个网络地址,并返回表示地址的数量的整数,地址可以是4位或8位的地址。
MySQL >选择inet_aton('209.207.224.40);
> 3520061480
生成的数字总是与网络字节顺序一致,如上面的例子,数字是根据209×2×24 + 207×2×16 + 224×2 + 8 + 40计算的。
inet_aton()也能理解短格式的IP地址:
MySQL >选择inet_aton('127.0.0.1),inet_aton('127.1);
> 2130706433, 2130706433
注:建议使用int unsigned列存储值时所产生的inet_aton()。如果你使用(unsigned)int列前八位的是小于127的IP地址的价值将高达2147483647(即inet_aton('127.255.255.255)返回值)。请看11.2节,数值型。
* inet_ntoa(expr)
给定一个数字网络地址(4或8位),它将地址的电地址表示返回为字符串。
MySQL >选择inet_ntoa(3520061480);
-> '209.207.224.40
当你做一个项目时,你不知道这两个函数,所以IP的处理是由你自己编写的函数,但是老化率很低。下面的函数是将IP转换成整数。
复制代码代码如下所示:
创建功能` transiptoint `(IP char(31))返回char(31)
开始
声明中char(10);
申报value2字符(10);
宣布3字符(10);
DECLARE value4 CHAR (10);
集值= substring_index(IP,'。',1);
集value2 = substring_index(IP,'。',2);
集(value2,value2 = substring_index ',1);
设置(IP,值= substring_index ',2);
设定值= substring_index(3,',',1);
设置(IP,珍惜= substring_index ',1);
集值1 = value1 << 24;
集value2 = value2 << 16;
设定值=值< 8;
value1 value2 + + +返回值珍惜;
结束;
为了方便IP地址,我还编写了一个函数,该函数在IP地址的每个部分中添加三位,如下所示:
复制代码代码如下所示:
创建功能`弹指`(IP char(31))返回char(31)
开始
声明中char(31);
申报value2字符(10);
宣布3字符(10);
声明珍惜char(10);
集值= substring_index(IP,'。',1);
集value2 = substring_index(IP,'。',2);
集(value2,value2 = substring_index ',1);
设置(IP,值= substring_index ',2);
设定值= substring_index(3,',',1);
设置(IP,珍惜= substring_index ',1);
集值1 =负载(value1,3,'0');
集value2 =负载(value2,3,'0');
设定值=负载(value3,3,'0');
集珍惜=负载(value4,3,'0');
concat(value1,value2,返回'。',' ',' ',3,珍惜);
结束;
以下是一些补充
* inet_aton(expr)
点地址(如127.0.0.1)作为一个字符串的一个网络地址,并返回表示地址的数量的整数,地址可以是4位或8位的地址。
MySQL >选择inet_aton('209.207.224.40);
> 3520061480
生成的数字总是与网络字节顺序一致,如上面的例子,数字是根据209×2563 + 207 * 2562 + 224×256 + 40计算的。
inet_aton()也能理解短格式的IP地址:
MySQL >选择inet_aton('127.0.0.1),inet_aton('127.1);
> 2130706433, 2130706433
注:建议使用int unsigned列存储值时所产生的inet_aton()。如果你使用(unsigned)int列前八位的是小于127的IP地址的价值将高达2147483647(即inet_aton('127.255.255.255)返回值)。看到MySQL的文档的数字类型。
* inet_ntoa(expr)
给定一个数字网络地址(4或8位),它将地址的电地址表示返回为字符串。
*
MySQL >选择inet_ntoa(3520061480);
-> '209.207.224.40
--------------------------------------------------------------------------------------------------
整数字段比字符串高效得多,它也与优化原则一致:字段类型定义使用最合适(最小)和最简单的数据类型。
的inet_aton()算法,事实上,借鉴国际上使用的国家之间的区别的IP号码。
ABCD的IP数:
一个* 256 3平方+ B * 256 2平方+ C * 256 1平方+ D * 256。
--------------------------------------------------------------------------------------------------
利用mysql的内置函数处理时间戳问题
Eg:选择from_unixtime(unix_timestamp(),% % % Y M H:%我:%s X);
结果:8月3日2004 03:35:48 2004