免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3521 | 回复: 13
打印 上一主题 下一主题

紧急求助:点段式IP转为有符号整数存储 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-23 10:10 |只看该作者 |倒序浏览
MySQL版本:5.1.30
GUI工具:Navicat for MySQL 8.0.29
table name:client
column name:IP(点段式的四节IP)
现在我有两个需求:
一、使用INET_ATON函数将四节点段式IP转为有符号整数或无符号整数存储
二、不用存储,但在建立的视图中使用INET_ATON函数将IP转换成整数,但它转换后的值是无符号整数,也就是值的范围0到4294967295,
这本来是挺好的,但我要导出到Access中去,Access的长整型仅支持-2147483648到2147483647,也就是相当于MySQL的Signed INT
我使用的语句如下:
SELECT
...
INET_ATON(`client`.`IP`) AS CLIENT_IP,
...

谁能教我一下?

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
2 [报告]
发表于 2009-02-23 10:18 |只看该作者
用字符。没有更大的。

论坛徽章:
0
3 [报告]
发表于 2009-02-24 13:36 |只看该作者
不想用字符串的话,把4294967295减去2147483648再存好了

论坛徽章:
0
4 [报告]
发表于 2009-02-24 22:13 |只看该作者
现在就是有点儿头痛,如果INET_ATON(IP)算出的值在0~2147483647之间,则不变,如果在2147483648至4294967295之间,则需要送去4294967296,不知这个表达式怎么写。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
5 [报告]
发表于 2009-02-25 08:57 |只看该作者
原帖由 vinhlam 于 2009-2-24 22:13 发表
现在就是有点儿头痛,如果INET_ATON(IP)算出的值在0~2147483647之间,则不变,如果在2147483648至4294967295之间,则需要送去4294967296,不知这个表达式怎么写。

select


&nbsp;&nbsp;if (INET_ATON(a.`ip_start`)  < 2147483647,INET_ATON(a.`ip_start`),4294967295) as ip_start ,



&nbsp;if (INET_ATON(a.`ip_end`)  < 2147483647,INET_ATON(a.`ip_end`),4294967295) as ip_end




from    `t_province_ip_new` a

论坛徽章:
0
6 [报告]
发表于 2009-02-25 10:18 |只看该作者
非常谢谢版主大驾帮助,不过,昨晚打错一个字了,引起了歧义。“如果在2147483648至4294967295之间,则需要送去4294967296”,
应是减去4294967296才对,也就是把它变成负值,使其范围在有符号整数所在的-2^31---2^31-1之间。而不是返回4294967295这个值。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
7 [报告]
发表于 2009-02-25 10:20 |只看该作者
那在后面减去就行了。

if (INET_ATON(a.`ip_start`)  < 2147483647,INET_ATON(a.`ip_start`),INET_ATON(a.`ip_start`)-4294967295) as ip_start

论坛徽章:
0
8 [报告]
发表于 2009-02-25 10:48 |只看该作者
减去的这个语法有问题,本来结果应该是负值在的,而且范围在-2147483648到0之间的,结果却变成了一个21号的正整数,增大了N倍。不知怎么回事。

论坛徽章:
0
9 [报告]
发表于 2009-02-25 10:59 |只看该作者
例如,203.200.235.191这个地址,使用INET_ATON(a.`ip_start`)之后,值变成了3418942399,如果使用如下表达式之后:INET_ATON(a.`ip_start`)-`)-4294967296
,值非但没有变成负数,反而增大了:184467440728335267,而我需要的正确值是:-876024897

[ 本帖最后由 vinhlam 于 2009-2-25 11:08 编辑 ]

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
10 [报告]
发表于 2009-02-25 12:27 |只看该作者
mysql> select INET_ATON("203.200.235.191") - - - 4294967296
&nbsp;&nbsp;&nbsp;&nbsp;-> ;
+-----------------------------------------------+
| INET_ATON("203.200.235.191") - - - 4294967296 |
+-----------------------------------------------+
|                                    -876024897 |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP