用程序执行以下两个语句
select * from TB1 where A='1001' and B<1234 and C>5678; ---》 查不到记录
select count(*) from TB1 where A='1001' and B<1234 and C>5678; ---》 查到一条
奇怪了!进入mysql,直接执行最上面的命令,可以查到一条记录。!

解决方案 »

  1.   

    select count(*) from TB1 where A='1001' and B <1234 and C>5678; 查到一条 是指count(*)结果是 1还有有一条结果为 0 的记录?一般来说 select count(*) from table1 where 1>2;
    会返回mysql> select count(*) from tx where 1>2;
    +----------+
    | count(*) |
    +----------+
    |        0 |
    +----------+
    1 row in set (0.09 sec)mysql>
      

  2.   

    如果不是上述问题,则估计你的MYI索引文件有问题了,用  analyze table t1 或者 check table t1 / repaire table t1 来修复一下。
    
      

  3.   

    count(*)的返回结果确实也是0。
    但是有一点比较疑惑, 为什么直接去mysql下敲命令可以查到改内容;
    你说如果是表有问题, 但是这张表还在程序的其他地方被查询,并且能成功返回select的内容。
      

  4.   

    表引擎是什么?什么字符集?
    如果可以,将这个表导出为TXT文件
    上传B到www.access911.net/csdn
    ,用WINRAR压缩
      

  5.   

    sql语句是真实的吗?
    show variables like 'char%'; 
      

  6.   

    我已经上传了.... linux MYSQL 的困惑.rar  
      

  7.   


    有些糊涂了,你的问题到底是什么? 能否贴一你的语句及执行结果,以及正确的预期结果,这样来描述你的问题。否则 count(*)的返回结果确实也是0。 直接select 无记录 ,这完全没任何不符啊。但是这张表还在程序的其他地方被查询,并且能成功返回select的内容 其它程序中的代码是什么?有没有在某部分进行了记录删除或其它影响表中记录的操作?
      

  8.   

    简单的来说  就是程序执行select * from TB1 where A='1001' and B <1234 and C>5678; ---》 查不到记录 
    表中而实际上是有一条符合条件的记录的!
    因为进入mysql下执行这条语句的命令,是可以查到一条的!  而整张表所有记录也就10条之内!
    这张表在其他地方的查询操作是OK的。
      

  9.   

    不好意思,不是我不想截图,真是截图不方便。补充说明一下:
    就是一条一句,用两种不同的方法执行。
    用程序执行,发现结果是查询不到对应的数据(事实上该结果是存在的)
    在liunx下敲mysql;选择表,执行该命令。能查询到该数据.ps:程序是用musql api写的,mysql_store_result()返回值不为零, mysql_num_rows()值为零。
    而用mysql 直接敲命令成功获得数据集
      

  10.   

    我觉得不是mysql的问题,你好好检查哪里有问题,或者是字符集设置
      

  11.   

    你导出有问题的数据,用TXT文件,上传www.access911.net/csdn,只要10条左右,可以模拟,主要是有问题的数据
      

  12.   

    select * from TB1 where A='1001' and B  <1234 and C>5678;由于没有你的数据,所以只能猜了! 如果你很不巧是   where A='1001' 这个 1001 如果是你自己乱写的,实际是中文或者其它的什么双字节字符。那么请检查一下你的字符集设置。建议提问是尽量以实际例子来分析。建议在你的程序中调试中断打出这个SQL语句,然后看一下是否有什么问题。毕竟可能的原因很多,比如你的代码有没有什么错误?
      

  13.   

    我可以把where条件去掉 也是不行,还有在程序的另一环节 可以对该表的该记录进行查询删除等操作!
      

  14.   

    只用一个用户连接,再运行SQL语句试试,看看结果如何
      

  15.   

    由于问题大家一直在猜来猜去,语言也比较混乱了,请对如下语句给予确定1. 在mysql 工具中,直接 select * from tbl 结果正常,有记录返回
    2. 在C API中同平 mysql_store_result() 结果 返回不为0 ,不为0 即代码执行正常。返回 NULL(0) 时代码执行错误。
    3. mysql_num_rows() 返回值 =0 (select * from tbl 1>2, 即使返回空集,但上面的mysql_store_result()不会报错,因为SQL语句是正常执行了)
    4. 此程序无并发,删除的可能,也就是说在程序执行  select * from tbl 时,表中一定有记录。如果以上理解均正确,建议分析你的代码了。
    1. SQL语句有没有写错?打中断看一下实际执行的SQL
    2. 打开msyql的日志功能,检查一下程序到底都执行了些什么SQL语句。