这个问题也是莫名其妙。MYSQL中符号 % 的使用难道还有什么限制不成?mysql> select count(*) from imei;
+----------+
| count(*) |
+----------+
| 108718   |
+----------+
1 row in set (0.02 sec)mysql> select count(*) from imei where imei like "imei 012%"
    -> ;
+----------+
| count(*) |
+----------+
| 108756   |---------数据怎么回比总数还大?imei段都是以 imei 012 开头的。
+----------+
1 row in set (0.09 sec)mysql>

解决方案 »

  1.   

    从来没有用过mysql的like,不知道什么原因,不过像上面的情况我都用left做
      

  2.   


    left 也有同样的错误!?mysql> select  count(*)  from  imei  where  left(imei, 8) = "imei 012" ;
    +----------+
    | count(*) |
    +----------+
    |   108756 |
    +----------+
    1 row in set (0.06 sec)mysql> select  count(*)  from  imei;
    +----------+
    | count(*) |
    +----------+
    |   108718 |
    +----------+
    1 row in set (0.00 sec)
      

  3.   

    执行explain+SQL语句分析一下mysql的执行过程,看看能不能发现问题.
    下面举一个例子:
    mysql> EXPLAIN SELECT COUNT(*) FROM Headline WHERE ExpireTime >= 1112201600 \G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: Headline          type: ALLpossible_keys: NULL ----------------------------->这里是可能存在的keys,可以有多个          key: NULL-------------------->执行上面SQL语句的时候有没有使用index或key      key_len: NULL          ref: NULL         rows: 302116-------------------->执行上面的SQL语句,所要扫描的记录数        Extra: Using where1 row in set (0.00 sec)下面又是一个例子:mysql> SELECT COUNT(*) FROM Headline WHERE ExpireTime >= 1112201600;+----------+| COUNT(*) |+----------+|     3971 |+----------+1 row in set (0.01 sec)mysql> EXPLAIN SELECT COUNT(*) FROM Headline WHERE ExpireTime >= 1112201600 \G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: Headline         type: rangepossible_keys: ExpireTime          key: ExpireTime      key_len: 4          ref: NULL         rows: 12009        Extra: Using where; Using index1 row in set (0.00 sec)
      

  4.   

    mysql>  select * from imei where datetime like "2006-03-21%" and imei like "imei 01%" limit 0,200;
    +-----------------+-----------------+----------------+------------+
    | imei            | nal             | sn             | dateTime   |
    +-----------------+-----------------+----------------+------------+
    108 rows in set (0.38 sec)mysql>  select * from imei where datetime like "2006-03-21%" and imei like "imei 01%";
    +-----------------+-----------------+----------------+------------+
    | imei            | nal             | sn             | dateTime   |
    +-----------------+-----------------+----------------+------------+
    70 rows in set (0.05 sec)注意1: 108-70 == 38 ****************************************************************
    mysql> select count(*) from imei;
    +----------+
    | count(*) |
    +----------+
    | 108718   |
    +----------+
    1 row in set (0.02 sec)mysql> select count(*) from imei where imei like "imei 012%"
        -> ;
    +----------+
    | count(*) |
    +----------+
    | 108756   |---------数据怎么回比总数还大?imei段都是以 imei 012 开头的。
    +----------+
    1 row in set (0.09 sec)注意2: 108756-108718 == 38 这个38 好象很特别。是缓存造成的吗?!
      

  5.   

    看起来是 由LIMIT 和过多的条件 同时引起的