基于语句的复制和SQL_CALC_FOUND_ROWS

问题描述

|| 我们开始使用基于语句的复制,发现它破坏了sql_CALC_FOUND_ROWS和FOUND_ROWS(),我正在寻找解决方法。来自2007年错误报告的评论建议使用ѭ0,但这似乎不起作用。 MysqL说语法无效。     

解决方法

如果您使用的是旧版MySQL,则可能是问题的一部分:http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_found-rows   FOUND_ROWS()未复制   可靠地使用基于语句的   复制。从MySQL开始   5.1.23,使用基于行的功能自动复制此功能   复制。 编辑:仅当您处于“ 1”模式时,以上方法才有效。 另外,正确的解决方法语法是:
SELECT SQL_CALC_FOUND_ROWS * FROM foo;
SET @found_rows = FOUND_ROWS();
SQL_CALC_FOUND_ROWS
不返回任何内容,它只是告诉MySQL计算从查询中找到的行数,即使a4ѭ子句阻止所有这些行都返回给客户端。然后可以使用
FOUND_ROWS()
返回ѭ3temporarily临时存储的值。 编辑:上述解决方法背后的想法(如MySQL错误12092中所述):   FOUND_ROWS()的结果被存储   到用户变量中并使用   相反。这将复制   即使在基于语句的情况下也正确   复制,因为它会写一个   二进制日志的User_var条目。