智能mysql查询错误解释器

智能mysql查询错误解释器,mysql,Mysql,我正在寻找一个应用程序,它将为我提供有关SQL查询中语法错误的更多描述性信息,而不是: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在附近(…)使用的正确语法 最后,我总是发现我的查询出了什么问题,但奇怪的是,这个错误消息如此普遍。我知道在像SQL这样的语言中很难“确定”地发现错误,但至少使用一些启发式方法(如果不是精确的规则)应该可以对常见的可能问题给出一些建议 有人知道这样的工具吗?嗯,,如果mysql能够处理这个问题并显示更多更好的错误消息,那就太好了。我很想看

我正在寻找一个应用程序,它将为我提供有关SQL查询中语法错误的更多描述性信息,而不是:

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解可在附近(…)使用的正确语法

最后,我总是发现我的查询出了什么问题,但奇怪的是,这个错误消息如此普遍。我知道在像SQL这样的语言中很难“确定”地发现错误,但至少使用一些启发式方法(如果不是精确的规则)应该可以对常见的可能问题给出一些建议


有人知道这样的工具吗?

嗯,,如果mysql能够处理这个问题并显示更多更好的错误消息,那就太好了。我很想看看是否有人也提出了解决方案。

MySQL解析器是用bison/flex构建的

当发生错误时,应用层(在这种情况下是MySQL)有关于解析失败原因的非常不准确的信息,并且很难向用户提供比当前更好的报告

考虑一个简单的计算器和一个括号错误,如:

(……(……)

第二个括号缺失在哪里?你需要一个人的大脑来回答这个问题,因为定位错误不仅意味着能够理解语法,还意味着能够理解正在处理的内容。解析器只会在要处理的语句末尾看到括号计数错误并报告错误。它做得再好不过了,即使语句非常大,这就是为什么在用C(或其他语言)编写代码时,如果您在括号或大括号方面出错,编译器可能会给出完全错误的信息

考虑这一点:

从mytable中选择,其中s=''和r=''

错误在哪里?我是不是因为想要:

从mytable中选择,其中s=“”和r=”

也许我想要这个:

从mytable中选择,其中s=''和r=''

对于人脑来说,后者似乎是可能的,因为人脑知道属性的内容看起来像SQL语句的一部分的可能性很低。但对于解析器来说,这意味着重新分析不理解的内容,这是非常矛盾的。人脑可能是错的,也许我的应用程序正在处理由在web表单中输入奇怪字符串的人输入的数据


因此,也许MySQL解析器可以改进,但我认为获得的结果不值得努力。

我可以说,查询可能很难调试。但是,错误消息说您有语法错误,并提供了错误的位置。在我编写的大多数软件中,如果出现错误,我通常会抛出异常r并添加我刚刚尝试运行的整个查询。通过查看它而不是db提供的片段,调试查询更容易。不过,我通常不使用预打包的“工具”。