Mysql 错误 1064 ("You have an error in your SQL syntax") 由 SQL 条评论触发
Mysql Error 1064 ("You have an error in your SQL syntax") triggered by SQL comments
我有一系列用于创建模式的脚本,在每条指令之前都有如下注释:
--------------------------------------------------------
-- Table TABLE_NAME
--------------------------------------------------------
当我在命令行上从 mysql 执行脚本时,出现如下错误:
ERROR 1064 (42000): 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 '------------------------------------------------------
------------------------' at line 1
(实际上,尽管消息总是引用第 1 行,但我对每条评论都有一个错误)。
为了快速解决我的问题,我简单地删除了评论和脚本 运行 没有问题,但我很惊讶看到这样的行为并且无法在 Whosebug 上找到相关问题。有人有解释吗?有没有人观察到这种奇怪的行为?
我是运行mysql5.6.30,ubuntu此时默认为5.6
两个破折号后需要一个 space 来表示评论。没有它它只是一个字符串:
-- ------------------------------------------------------
-- Table TABLE_NAME
-- ------------------------------------------------------
来自MySQL Manual:
From a “-- ” sequence to the end of the line. In MySQL, the “-- ”
(double-dash) comment style requires the second dash to be followed by
at least one whitespace or control character (such as a space, tab,
newline, and so on). This syntax differs slightly from standard SQL
comment syntax, as discussed in Section 1.8.2.4, “'--' as the Start of
a Comment”.
(强调我的)
tl;DR 您的 --
指示注释必须后跟至少一个空格或控制字符。
你的固定码:
-- -----------------------------------------------------
-- Table TABLE_NAME
-- -----------------------------------------------------
在MySQL中你也可以使用这个语法:
/*
* Table TABLE_NAME
*/
甚至这样:
# -----------------------------------------------------
# Table TABLE_NAME
# -----------------------------------------------------
来自:
http://dev.mysql.com/doc/refman/5.7/en/comments.html
双破折号后的 space 即“--”是评论标识的一部分!
MySQL 决定背后的理由:在这里 http://dev.mysql.com/doc/refman/5.7/en/comments.html
The space is required to prevent problems with automatically generated
SQL queries that use constructs such as the following, where we
automatically insert the value of the payment for payment:
UPDATE account SET credit=credit-payment
UPDATE account SET credit=credit--1
就个人而言,我只在注释一行时使用两个破折号 --
。使用块注释时,我倾向于使用以下格式:
/**
* Table TABLE_NAME
*
*/
我有一系列用于创建模式的脚本,在每条指令之前都有如下注释:
--------------------------------------------------------
-- Table TABLE_NAME
--------------------------------------------------------
当我在命令行上从 mysql 执行脚本时,出现如下错误:
ERROR 1064 (42000): 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 '------------------------------------------------------
------------------------' at line 1
(实际上,尽管消息总是引用第 1 行,但我对每条评论都有一个错误)。
为了快速解决我的问题,我简单地删除了评论和脚本 运行 没有问题,但我很惊讶看到这样的行为并且无法在 Whosebug 上找到相关问题。有人有解释吗?有没有人观察到这种奇怪的行为?
我是运行mysql5.6.30,ubuntu此时默认为5.6
两个破折号后需要一个 space 来表示评论。没有它它只是一个字符串:
-- ------------------------------------------------------
-- Table TABLE_NAME
-- ------------------------------------------------------
来自MySQL Manual:
From a “-- ” sequence to the end of the line. In MySQL, the “-- ” (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on). This syntax differs slightly from standard SQL comment syntax, as discussed in Section 1.8.2.4, “'--' as the Start of a Comment”.
(强调我的)
tl;DR 您的 --
指示注释必须后跟至少一个空格或控制字符。
你的固定码:
-- -----------------------------------------------------
-- Table TABLE_NAME
-- -----------------------------------------------------
在MySQL中你也可以使用这个语法:
/*
* Table TABLE_NAME
*/
甚至这样:
# -----------------------------------------------------
# Table TABLE_NAME
# -----------------------------------------------------
来自: http://dev.mysql.com/doc/refman/5.7/en/comments.html 双破折号后的 space 即“--”是评论标识的一部分! MySQL 决定背后的理由:在这里 http://dev.mysql.com/doc/refman/5.7/en/comments.html
The space is required to prevent problems with automatically generated SQL queries that use constructs such as the following, where we automatically insert the value of the payment for payment:
UPDATE account SET credit=credit-payment
UPDATE account SET credit=credit--1
就个人而言,我只在注释一行时使用两个破折号 --
。使用块注释时,我倾向于使用以下格式:
/**
* Table TABLE_NAME
*
*/