【问题标题】:Is there any way to retrieve more accurate MySQL error messages?有没有办法检索更准确的 MySQL 错误消息?
【发布时间】:2012-10-18 08:08:00
【问题描述】:
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 [random snippet of query code]

我很少能从类似的 MySQL 错误中推断出有价值的东西,有什么方法可以获得一些更具体的数据吗?

我看到有人驳回这个问题,说由于 MySQL 的语法工作原理,不可能获得准确的错误数据。真的是这样吗?

【问题讨论】:

  • 足够准确。 “查询代码的随机 sn-p”实际上不是随机的,而是查询在语法上不正确的地方。 “因为 MySQL 的语法是如何工作的,所以要获得准确的错误数据。真的是这样吗?” --- 已经很准确了。
  • 错误信息通常很好,因为 near ... 指示问题的确切位置。

标签: mysql error-handling


【解决方案1】:

不仅 MySQL 会给出这样的语法错误,MS SQL Server 也会给出非常相似的消息。

错误消息非常准确,因为错误消息中显示的代码正是解析器确定无法继续解析查询的确切位置。

但是,查询中的实际错误通常在查询中稍早一些。例如,如果您在查询中将“from”拼错为“fom”,解析器将继续认为“fom”是之前出现的最后一个字段的别名,并在找到表名时给您一个语法错误而不是预期的逗号或“from”关键字。它将指向表名作为错误的位置,而不是拼写错误的关键字。

【讨论】:

    【解决方案2】:

    有时将查询分解为多行而不是一长行会有所帮助。这仍将仅向您显示错误的大致位置,但它可能会有所帮助。

    【讨论】:

    • 错误信息始终为 1 行字符串。它从原始查询中截断换行符。所以我会说“阅读错误消息总是有帮助的”,没有其他必要了。
    • 是的,我看到错误字符串总是一样的,但是在换行时它会告诉你错误发生的行号,而不是总是“第 1 行”,只是在 phpMyAdmin 中尝试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多