Frage Warum sind MySQL-Syntaxfehlermeldungen so schlecht?


MySQL-Syntaxfehler sind oft ziemlich vage und geben nur die Zeile an, in der der Fehler auftritt. Das Schreiben eines Parsers, der genaue und nützliche Fehlermeldungen liefert, ist nicht völlig trivial, aber es ist kein offenes Forschungsproblem: Die meisten Compiler für allgemeine Programmiersprachen erzeugen Fehlermeldungen, die viel nützlicher sind.

Warum erzeugt der Parser von MySQL keine besseren Fehlermeldungen? Hat das etwas mit MySQL zu tun, oder macht die SQL-Grammatik dies generell extrem schwierig?

Hier ist ein Beispiel:

SELECT * FROM foo
WHERE bar > 0
AND baz NOT NULL
ORDER BY qux ASC

MySQL erzeugt folgende Fehlermeldung: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL ORDER BY qux ASC'

Eigentlich, NOT NULL sollte sein IS NOT NULL. Warum generiert MySQL keinen Fehler wie? Unexpected token NOT at line 3 column 8?


20
2018-03-28 15:40


Ursprung


Antworten:


MySQL Optimizer optimiert die von Ihnen gesendete Abfrage. Bis es ausgeführt wird, könnte es ziemlich anders aussehen. Auch die Idee, dass die Zeile und Spalte während dieser Zeit gleich bleiben, ist nicht korrekt.

Hier sehen Sie, wie MySQL Abfragen optimiert, die es erhält:

http://dev.mysql.com/doc/internals/en/optimizer-primary-optimizations.html

Update 1:

Ich gehe davon aus, dass die Fehlerberichterstattung nicht so gut ist. Ich sage auf keinen Fall, dass die MySQL-Fehlerberichterstattung gut ist, es ist wirklich schlecht. Manchmal bekomme ich Fehler, die nichts mit dem eigentlichen Fehler zu tun haben. Hier sind einige Probleme, denen Peter Zaitsev begegnet ist (ein fantastischer Blog für Leute, die mit MySQL arbeiten):

http://www.mysqlperformanceblog.com/2011/04/06/more-on-mysql-error-messages/ http://www.mysqlperformanceblog.com/2008/03/16/mysql-error-message-nonsenses/


2
2018-03-28 15:47



Oracle ist, wo Open-Source-Software sterben wird. Sie schrecken ab, den frei verfügbaren Konkurrenten für ihre kommerziellen Datenbankanwendungen sehr gut zu machen. Es war gut genug, dass niemand für eine Weile ein anderes machen würde, und jetzt bevorzuge ich MariaDB und die anderen Gabeln, wenn ich die Wahl habe.


1
2018-01-10 15:24