Error number: MY-011236; Symbol: ER_REWRITER_QUERY_FAILED; SQLSTATE: HY000
Message: Rewritten query failed to parse:%s
错误说明:
MySQL报告错误MY-011236,也称为ER_REWRITER_QUERY_FAILED,这表示关系数据库管理系统(RDBMS)尝试重写SQL查询失败。SQLSTATE为HY000.错误消息为:“Rewriter failed to rewrite the query’.
MY-011236/ ER_REWRITER_QUERY_FAILED的最常见的案例是:使用不支持的MS SQL语句(SQL服务器版本低于Microsoft SQL Server 2008);尝试通过索引查找关联表,但找不到匹配的列;使用使用IN子句查找2个表,但不支持列的数据类型;以及语法错误,如拼写错误和缺少空格。
解决方法:
1. 首先,查看根本原因,确认是否是问题语句中存在语法错误( MySQL查询可以使用EXPLAIN语句解释)。
2. 若查看到索引重写错误,要首先确认关联的索引是否正确设置,并确定是否正确地使用字段作为列。
3. 若查看到MS SQL查询兼容问题,那么改正查询,以符合SQL语句的标准。这包括使用表连接(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN)优化查询,以及避免使用MS SQL服务器版本低于MS SQL 2008的查询。
4. 若是拼写或缩写问题,需要确认SQL查询中所有关键字,函数,变量,表名等信息是否正确输入。
5. 在不用更改查询语句的情况下,确保MySQL服务器版本高于Microsoft SQL Server 2008的支持的sql语法,确保MySQL使用对应的SQL查询重写功能;
6. 若有必要,在MySQL服务器上创建一个临时表,以包含临时结果集,并执行查询以检索临时表中的数据;
7. 重新确认SQL查询,以验证已正确指定使用IN子句查找2个表时的数据类型和索引类型;
8.确保SQL语句中的表,字段和查询都是与MySQL数据库管理系统(RDBMS)支持的标准语法相兼容的;
9.最后,如果以上步骤都不尝试,则建议使用标准LEFT JOIN 和INNER JOIN的SQL的查询语句,以便系统重写查询,从而避免出现MY-011236/ ER_REWRITER_QUERY_FAILED错误。