Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL语句末尾的\g是什么意思?如何修复未运行的查询?_Mysql - Fatal编程技术网

MySQL语句末尾的\g是什么意思?如何修复未运行的查询?

MySQL语句末尾的\g是什么意思?如何修复未运行的查询?,mysql,Mysql,我有一个自动生成的SQL脚本要在5.6.17-157.2上运行 它在5.5.33-1.17.1运行良好 每个SQL语句的末尾都显示\g。比如说 CREATE TABLE articoli ( ID INT, titolo LONGTEXT, sottoti

我有一个自动生成的SQL脚本要在5.6.17-157.2上运行

它在5.5.33-1.17.1运行良好

每个SQL语句的末尾都显示
\g
。比如说

CREATE TABLE articoli
(
ID                                                                INT,
titolo                                                            LONGTEXT,
sottotitolo                                                       LONGTEXT,
descrizione                                                       LONGTEXT,
note                                                              LONGTEXT,
nomeopzione1                                                      LONGTEXT,
nomeopzione2                                                      LONGTEXT,
nomeopzione3                                                      LONGTEXT,
pagina                                                            CHAR(100),
sottopagina                                                       SMALLINT,
plain_titolo                                                      CHAR(200),
plain_sottotitolo                                                 CHAR(200),
nomeopzione4                                                      LONGTEXT,
KEY (ID),
KEY (pagina),
KEY (sottopagina)
);\g
两个版本之间发生了什么变化以中断查询执行?我如何告诉5.6接受\g而不在乎

我不能仅仅改变SQL。它是自动生成的代码,必须作为讨厌的可怕软件“每日更新”(daily update)的最后一步运行

[更新]最好改变这个问题:仅仅知道那是什么还不够。我需要运行查询。

go-(\g)-向mysql服务器发送命令

(\g)->开始
向mysql服务器发送命令。

mysql已经接受
\g
,但它必须遵循SQL语句

\g
基本相同也就是说,它是语句的终止符,这意味着将其发送到服务器进行解析和执行

您的示例显示了以分号和
\g
结尾的create table语句。这将导致CREATETABLE语句运行,因为它有一个分号。但随后它尝试在没有语句的情况下运行另一个语句终止符

试试这个:

mysql> ;
ERROR: 
No query specified
当然没有指定任何查询,这只是显示一个没有查询的分号

这与除了
\g
之外什么都没有的行是一样的:

mysql> \g
ERROR: 
No query specified
$ cat > bad.sql
select 123; \g

$ sed -e 's/\\g//g' bad.sql
select 123; 
如果您运行一个真正的查询,然后运行任意一种类型的冗余终止符,您会得到类似的结果。它运行第一个查询,然后空查询失败:

mysql> select 123; ;
+-----+
| 123 |
+-----+
| 123 |
+-----+

ERROR: 
No query specified

mysql> select 123; \g
+-----+
| 123 |
+-----+
| 123 |
+-----+

ERROR: 
No query specified
我不知道你是什么意思,这个代码是生成的,你不能更改它。你必须这么做,因为你所拥有的不会起作用

我建议您在尝试运行之前,先从文件中删除
\g
。下面是一个文件示例,其中包含错误的空查询模式,并使用sed删除冗余的
\g

mysql> \g
ERROR: 
No query specified
$ cat > bad.sql
select 123; \g

$ sed -e 's/\\g//g' bad.sql
select 123; 

两人都投了赞成票。我笨得连问题都说错了。