方法1,[code]select inet_ntoa(0xFFFFFFFF&0x05D2D1DBB5BCBE1C040A4C103B);[/code]
方法2,[code]set @var =0x05D2D1DBB5BCBE1C040A4C103B;
select inet_ntoa(0xFFFFFFFF&@var);
[/code]为什么第二算方法得到的结果是不对的。

解决方案 »

  1.   


    其实这是一个移动终端在移动网上的IP以varbinary()类型存放,现在就是想在SQL语句里将它转成IP,用来跟另一份数据作比较。我的疑惑是,直接SELECT 0xFACA987^0xFACA98A;
    select 0xFFFFFFFF&0x05D2D1DBB5BCBE1C040A4C103B;
    SELECT 0xFACA987|0xFACA98A;都是正常的
    将值存到变量,或将值存到数据表里取出来运算,结果就不对了。
      

  2.   

    0xFFFFFFFF&0x05D2D1DBB5BCBE1C040A4C103B;是想截取最后八位,因为移动终端的ip是ipv4的,所以只需要32位就可以了。
      

  3.   

    MYSQL支持的最大整数也就 8个字节 。
    楼上的那个显然已经超过 8 byte
      

  4.   


    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
      

  5.   

    `c1` varbinary(32) DEFAULT NULL,这儿用的不是INT的数据类型。 varbinary不会被MYSQL认为是数字。
      

  6.   

    一定要转成10进制数值才可以进行|,&.^操作。