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

标签 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

这可能是同一个错误,只是在 MariaDB 中没有修补,还是您认为我做错了什么?

谢谢!

最佳答案

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');

查询对我有用: select sql_calc_found_rows * from foo where name = 'x' limit 5;

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

关于MySQL/MariaDB FOUND_ROWS 返回 1,即使没有返回任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47556655/

相关文章:

mysql - MariaDB 中的文件组

java - 无法使用 while 循环提交表单

php不会从数据库返回json数据

php - mysql 不会从使用外来(印地语/梵文)字符的表中进行选择

c - 使用 select() 的非阻塞 I/O

php - laravel 使用 eloquent 填充选择框和 Blade

sql - mariadb 声明变量语法错误

php - 按小时选择摘要中的行并将其分组

java - Spring data jpa LIKE 查询不能在末尾使用空格吗?

MySQL查询选择表中时间值等于当前时间的字段