即使没有返回任何行,MySQL / MariaDB FOUND_ROWS也会返回1

时间:2017-11-29 15:46:26

标签: mysql select mariadb sql-calc-found-rows

我正在运行MariaDB版本5.5.56并且似乎遇到了一个错误:FOUND_ROWS()在返回零行的SELECT之后返回“1”。

根据bug report 83110,MySQL从版本5.7.15开始出现此问题,但似乎是一个封闭的问题,所以我认为它是固定的。但是,我不确定MySQL和MariaDB版本号是如何关联的,或者是否将对MySQL的修复应用于MariaDB。

我的发行版软件包包括MariaDB 5.5.56作为最新版本。

我做错了吗?当前一个查询返回零结果时,为什么FOUND_ROWS会返回1? (是的,我在上一个查询中包含了SQL_CALC_FOUND_ROWS语句。

示例:

SELECT SQL_CALC_FOUND_ROWS * FROM table1
    WHERE field = 'something that would not match any records' LIMIT 5;
SELECT FOUND_ROWS() as count_of_rows;

-- count_of_rows = 1

这可能是同一个bug,只是在MariaDB中没有修补,或者你认为我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

MariaDB 5.5与MySQL 5.7匹配(包括我推测的所有错误)。 MariaDB使用JIRA(https://jira.mariadb.org/),您可以看到一些与SQL_CALC_FOUND_ROWS有关的错误已得到解决。

我在MariaDB 10.3(当前的GA版本)上进行了尝试,并创建了一些示例架构:

create table foo (id integer primary key, name varchar(50));

并插入几行:

insert into foo(id, name) values (1, 'Bob');
insert into foo(id, name) values (2, 'Chris');
insert into foo(id, name) values (3, 'David');
insert into foo(id, name) values (4, 'Esther');
insert into foo(id, name) values (5, 'Fred');
insert into foo(id, name) values (6, 'Ginger');

,该查询对我有用:     从foo中选择sql_calc_found_rows *,其中name ='x'限制为5;

SELECT FOUND_ROWS() as count_of_rows;
+---------------+
| count_of_rows |
+---------------+
|             0 |
+---------------+
1 row in set (0.010 sec)