方法1,[code]select inet_ntoa(0xFFFFFFFF&0x05D2D1DBB5BCBE1C040A4C103B);[/code]
方法2,[code]set @var =0x05D2D1DBB5BCBE1C040A4C103B;
select inet_ntoa(0xFFFFFFFF&@var);
[/code]为什么第二算方法得到的结果是不对的。
方法2,[code]set @var =0x05D2D1DBB5BCBE1C040A4C103B;
select inet_ntoa(0xFFFFFFFF&@var);
[/code]为什么第二算方法得到的结果是不对的。
其实这是一个移动终端在移动网上的IP以varbinary()类型存放,现在就是想在SQL语句里将它转成IP,用来跟另一份数据作比较。我的疑惑是,直接SELECT 0xFACA987^0xFACA98A;
select 0xFFFFFFFF&0x05D2D1DBB5BCBE1C040A4C103B;
SELECT 0xFACA987|0xFACA98A;都是正常的
将值存到变量,或将值存到数据表里取出来运算,结果就不对了。
楼上的那个显然已经超过 8 byte
CREATE TABLE IF NOT EXISTS `table5` (
`c1` varbinary(32) DEFAULT NULL,
`id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;INSERT IGNORE INTO `table5` (`c1`, `id`) VALUES
(_binary 0x3F563F65, 1),
(_binary 0x3FAAAA3F, 2),
(_binary 0x56CA987C, 3);上面初始化数据。
select inet_ntoa(0xFFFFFFFF&0x3F563F65)
union
select inet_ntoa(0xFFFFFFFF&0x3FAAAA3F)
union
select inet_ntoa(0xFFFFFFFF&0x56CA987C);结果是63.86.63.101
63.170.170.63
86.202.152.124但是以下语句的结果是select inet_ntoa(0xFFFFFFFF&c1),c1 from table5结果inet_ntoa(0xFFFFFFFF&c1) HEX(c1)
0.0.0.0 0x3F563F65
0.0.0.0 0x3FAAAA3F
0.0.0.0 0x56CA987C