2010-02-24 41 views
3

我正在尋找一個應用程序,這會給我有關SQL查詢語法錯誤多一些描述性信息,不是:智能MySQL查詢錯誤解釋

您的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在附近使用正確的語法(...)

最後,我總是發現我的查詢出了什麼問題,但是這個錯誤有點奇怪消息是如此普遍。我知道,很難在像SQL這樣的語言中「確定」地發現錯誤,但至少使用一些啓發式(如果不是確切的規則),應該可以給出關於常見可能問題的一些建議。

有誰知道這樣的工具?

+0

我可以說,查詢可能很難調試。但是,錯誤消息表明您有語法錯誤並提供錯誤的位置。在我編寫的大多數軟件中,如果出現錯誤,我通常會拋出異常並添加我剛剛嘗試運行的整個查詢。它更容易通過查看而不是在db提供的片段來調試查詢。儘管我通常不使用預先打包的「工具」。 – thetaiko

回答

0

好,have not seen such tool yet,這將是非常巨大的,如果的MySQL可以藉此照顧,表現出更多更好的錯誤信息。很想看看有沒有人提出解決方案。

1

MySQL分析器是用bison/flex構建的。

當發生錯誤時,應用程序層(在這種情況下,MySQL)有非常不準確的信息解釋爲什麼解析失敗,很難給用戶提供比目前更好的報告。

考慮了簡單的計算器,並像一個括號錯誤:

(...(.....)

當第二個括號缺少你需要一個人的大腦來回答,因爲這個問題本地化錯誤意味着不僅能夠理解語法,還能理解正在處理的內容。解析器只會看到在處理語句結束時,括號的數量是錯誤的並報告錯誤。更好的是,即使語句非常大,這就是爲什麼當用C語言(或其他語言)編寫代碼時,如果對括號或括號做了一些錯誤,編譯器可能會給出完全錯誤的信息。

考慮這個:

從mytable中選擇其中s =''和r =''';

錯誤在哪裏?難道我不當使用「而不是‘爲where子句,因爲我想有全:

從mytable的選擇,其中s =’」和R =「」「;

也許我想這樣的:

從mytable中選擇,其中s =''和r ='';

對於人腦而言,後者似乎是可能的,因爲人類的大腦知道屬性的內容看起來像是SQL語句的一部分。但對於一個解析器來說,這意味着要重新解析那些未被理解的內容,這是非常矛盾的。人腦可能是錯的,也許我的應用程序正在處理由在Web表單中輸入奇怪字符串的人輸入的數據。

所以,也許MySQL解析器可以改進,但我不認爲獲得的結果將是值得的努力。