有很多次我沮丧地试图调试一个只是告诉我在你那乱糟糟的地方附近的查询有一个错误'。为什么它不能完全告诉我错误?
示例:
您的SQL语法有错误;检查与MariaDB服务器版本对应的手册,以便在#system; systemquery1附近使用正确的语法((选择数据来自(SELECT u.id as userid,' at line 12
答案 0 :(得分:1)
SQL解析器 - 与许多语言的解析器一样 - 并不那么聪明。他们知道语言是什么样的。但是,他们没有想象力。当某些事情没有做好时,他们只知道它是不对的。
人类语言一般都没有这个问题。它们内置了大量冗余功能,可以帮助扬声器填充缺失的声音,缺少单词,理解同音异义词和无法识别的语法。
一些较新的数据库引擎变得更加智能。例如,当我拼写错误的东西时,当BigQuery建议(总是正确的)变量名时,我仍然留下了深刻的印象。
答案 1 :(得分:1)
令人沮丧的语法错误消息的主要原因之一是MySQL和MariaDB解析器是使用GNU Bison解析器生成器创建的。由于此库的通用特性以及SQL解析器的实现方式,您可以看到发现错误的位置,但不知道预期的内容或正确的内容。
多个注释中提到的一些事实是,您可以将查询放入存储过程中,并且您将获得更好的错误消息。