数据表中有一个字段 是 bigint(20) unsigned
我进行如下操作:mysql> SELECT fid FROM t_test WHERE fid IN (0x034358000017333);
+-------------------+
| fid               |
+-------------------+
| 14695522661135155 |
| 14695522661135156 |
+-------------------+奇怪地返回了两个记录....
再用如下操作:mysql>  SELECT fid FROM t_test WHERE fid IN (14695522661135155 );
+-------------------+
| fid               |
+-------------------+
| 14695522661135155 |
+-------------------+正确地返回了一个记录.
于是我试试用conv 函数来处理...
结果如下: conv是对的.
mysql> select conv("034358000017333",16,10);  
+-------------------------------+
| conv("034358000017333",16,10) |
+-------------------------------+
| 14695522661135155             |
+-------------------------------+
1 row in set (0.00 sec)不过select 出来的还是两个记录....疯了....
mysql> SELECT fid FROM t_test WHERE fid IN ( conv("034358000017333",16,10));                 
+-------------------+
| fid               |
+-------------------+
| 14695522661135155 |
| 14695522661135156 |
+-------------------+
很奇怪...求解...

解决方案 »

  1.   

    14695522661135156 
    14695522661135155估计问题是浮点数的问题,这么大的数,mySQL估计是转化成浮点数然后进行运算了。双精度最大可以表示
    1.79769313486232 e308
    15个有效数字。所以你的In 估计会选出 146955226611351xx 所有的数据。
        [align=center]====  ====
    [/align]
      

  2.   

    升级你的版本吧。而且语句应该这么写
    SELECT fid FROM t_test WHERE fid IN (conv(034358000017333,16,10));     
      

  3.   

    建议改成VARCHAR(20)
        [align=center]====  ====
    [/align]
      

  4.   

     mysql> SELECT fid FROM t_test WHERE hex(fid) IN ('034358000017333');  mysql> SELECT fid FROM t_test WHERE FORMAT(fid,0) IN (ox034358000017333); 
        [align=center]====  ====
    [/align]
      

  5.   


    LZ的数值还没有超过BIGINT的范围吧
    ^_^